Json 如何处理此类地图数据
打印(JSONECODE(参数)) 得到以下错误Json 如何处理此类地图数据,json,dart,Json,Dart,打印(JSONECODE(参数)) 得到以下错误 {productid: 456813, token: 6t90jwawirc3dznbn8khevkg1b6n7vnx, quote_id: 813, specData: {{super_attribute: {218: {value: 297}}, qty: 1}, {super_attribute: {218: {value: 298}}, qty: 1}, {super_attribute: {218: {value: 299}}, qty
{productid: 456813, token: 6t90jwawirc3dznbn8khevkg1b6n7vnx, quote_id: 813, specData: {{super_attribute: {218: {value: 297}}, qty: 1}, {super_attribute: {218: {value: 298}}, qty: 1}, {super_attribute: {218: {value: 299}}, qty: 1}, {super_attribute: {218: {value: 300}}, qty: 1}, {super_attribute: {218: {value: 301}}, qty: 1}}}
将对象转换为可编码对象失败:“\u CompactLinkedHashSet”的实例
您的数据结构对于直接转换为JSON无效。主要问题是在params
(specData
)中设置了Set
,这是jsonecode
所不允许的,其记录如下:
如果值包含不可直接编码为JSON字符串的对象(不是数字、布尔值、字符串、null、列表或带有字符串键的映射的值),则使用toEncodable
函数将其转换为必须直接编码的对象
这里有两种解决方案。您可以将specData
更改为列表
。或者,在转换为JSON时,您可以使用ToEncode
参数jsonecode
将集合的类型更改为列表
:
Converting object to an encodable object failed: Instance of '_CompactLinkedHashSet<dynamic>'
奖励:很难知道您的密钥是否在super\u属性中
是int
还是String
。但如果要转换为JSON,必须使用String
。如果它是int
,您也可以使用toEncodable
来修复它,但它会变得有点混乱,因此最好您可以对数据结构进行一些控制。您的params
包含一个无法编码为JSON的Set
。更具体地说,specData
是一个Set
,它应该是一个列表
。token
值是否像您的示例中那样在其值周围包含引号?@daddygames我猜他的示例只是在某些数据结构上调用print()
。这将输出不带任何引号的结构。
print(jsonEncode(params, toEncodable: (object) {
if (object is Set) {
return object.toList();
} else {
throw Exception('Could not encode: $object');
}
}));