将 Map 转换为 json 字符串颤振
Posted
技术标签:
【中文标题】将 Map 转换为 json 字符串颤振【英文标题】:Convert Map to json String flutter 【发布时间】:2021-10-26 00:09:19 【问题描述】:我是 dart 新手,尝试将 Map 转换为 sqflite 的 json 字符串,json.encoder
和 jsonEncode
不起作用。我尝试使用json_serializable
,但无法运行build_runner
,使用元数据和分析器进行了一系列操作。
转换变体时出现问题,应该如下所示:
"variants":
"iphone 6": "1": "8", "2": "6",
"xiaomi mi6": "1": "8", "3": "5",
"samsung A6": "1": "8"
它的样子:
variants:
iphone 6: 1: 8, 2: 6,
xiaomi mi6: 1: 8, 3: 5,
samsung A6: 1: 8
SQL函数:
Future<void> addToCart(List<List<TextEditingController>> controllers, Item item) async
Map<String, Map<int, String>> resultMap = Map();
var list = item.variants.values.toList();
var models = item.variants.keys.toList();
for (int i = 0; list.length > i; i ++)
var variantsName = list.elementAt(i).toList();
var modelsName = models.elementAt(i);
Map<int, String> values = Map();
for (int ind = 0; variantsName.length > ind; ind ++)
String reasultC = controllers[i].elementAt(ind).text;
if (reasultC.isNotEmpty && int.parse(reasultC) > 0)
values[ind + 1] = reasultC;
if (!resultMap.containsKey(modelsName) && values.isNotEmpty)
resultMap[modelsName] = values;
db = await openDatabase("$_dbName.db");
db.execute('''
CREATE TABLE IF NOT EXISTS $_dbName(
id INTEGER PRIMARY KEY,
idItem TEXT,
title TEXT,
variants TEXT,
images TEXT)
''');
var end = Cart(idItem: item.id, title: item.title, variants: resultMap, images: item.images).toJson();
print(end);
await db.insert(_dbName, end);
await db.close();
class Cart
String idItem;
String title;
Map<String, dynamic> variants;
List<String> images;
Cart(this.idItem, this.title, this.variants, this.images);
Map<String, dynamic> toJson() =>
<String, dynamic>
'idItem': this.idItem,
'title': this.title,
'variants': jsonEncode(this.variants), <= NoSuchMethodError: Class '_InternalLinkedHashMap<int, String>' has no instance method 'toJson'. Receiver: _LinkedHashMap len:1 T
'images': json.encode(this.images)
;
谢谢。
【问题讨论】:
有什么问题?是什么让你说它不起作用?它生成的 JSON 是什么样子的? @stacktrace2234 我需要将 map 'variants' 转换为 json 字符串,添加它的外观和外观 你试过'variants': jsonEncode(this.variants)
吗?
@stacktrace2234 我做了
这不是你想要达到的目标吗:i.imgur.com/jiPl3WT.png ?
【参考方案1】:
我发现一个错误,这是一个非常幼稚的错误,将地图类型从Map <String, Map <int, String>
更改为Map <String, Map <String, String >>
Map<String, Map<String, String>> resultMap = Map();
var list = item.variants.values.toList();
var models = item.variants.keys.toList();
for (int i = 0; list.length > i; i ++)
var variantsName = list.elementAt(i).toList();
var modelsName = models.elementAt(i);
Map<String, String> values = Map();
for (int ind = 0; variantsName.length > ind; ind ++)
String reasultC = controllers[i].elementAt(ind).text;
if (reasultC.isNotEmpty && int.parse(reasultC) > 0)
values["$ind + 1"] = reasultC;
if (!resultMap.containsKey(modelsName) && values.isNotEmpty)
resultMap[modelsName] = values;
【讨论】:
【参考方案2】:这与json.encode
一起正常工作:
import 'dart:convert';
void main()
try
var obj = "variants":
"iphone 6": "1": "8", "2": "6",
"xiaomi mi6": "1": "8", "3": "5",
"samsung A6": "1": "8"
;
String str = json.encode(obj);
print(str);
catch(e)
print(e);
DartPad link
【讨论】:
我的地图没有引号以上是关于将 Map 转换为 json 字符串颤振的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Jackson JSON 将 JSON 字符串转换为 Map<String, String>