Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 如何处理此类地图数据_Json_Dart - Fatal编程技术网

Json 如何处理此类地图数据

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

打印(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: 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');
    }
  }));