服务器有个字段如下:
"data":{"A":["A1","A2"], "B":["B1","B2"]},怎么也解析不出来,直接报错.
解析代码如下:
String jsonTags = "这里是服务器获取数据代码";//这个数获取服务器数据的方法,根据不同需求自己去写. print("========json:::$jsonTags=============="); Map<String, dynamic> mapTags = jsonDecode(jsonTags);
问题一、
打印数据和报错如下:
I/flutter (23166): ========json:::{A: [A1, A2], B: [B1, B2]}==============
E/flutter (23166): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: FormatException: Unexpected character (at character 2)
E/flutter (23166): {A: [A1, A2], B: [B1, B2]}
E/flutter (23166): ^
说是非法字符,观察发现是缺少了字符串的双引号,直接整个jsonTags成了一个字符串导致的.
修改服务器为如下写法:
"data":"{\"A\":[\"A1\",\"A2\"], \"B\":[\"B1\",\"B2\"]}"
则解析正确如下:
I/flutter (23166): ========json:::{"A":["A1","A2"], "B":["B1","B2"]}==============
遍历map代码如下:
Map<String, dynamic> mapTags = jsonDecode(jsonTags); mapTags.forEach((key, value) { print("========key:::$key,,,,,value:::$value=============="); });
正常遍历成功结果如下:
I/flutter (23166): ========json:::{"A":["A1","A2"], "B":["B1","B2"]}==============
I/flutter (23166): ========key:::A,,,,,value:::[A1, A2]==============
I/flutter (23166): ========key:::B,,,,,value:::[B1, B2]==============
到此问题一解决。
问题二、
我要把解析到的map存在我定义的集合中,集合中对象定义代码如下:
class TagData { String title = ""; List<String> tips = []; }
String jsonTags = "这里是服务器获取数据代码";//这个数获取服务器数据的方法,根据不同需求自己去写. print("========json:::$jsonTags=============="); Map<String, dynamic> mapTags = jsonDecode(jsonTags); List<TagData> tipList = []; mapTags.forEach((key, value) { print("========key:::$key,,,,,value:::$value=============="); tipList.add(TagData() ..title = key ..tips = value; });
运行报错如下:
Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<String>'
就是tips = value出的错,此处默认value是List<dynamic>,不能直接使用List<String>接.
修改如下:
String jsonTags = "这里是服务器获取数据代码";//这个数获取服务器数据的方法,根据不同需求自己去写. print("========json:::$jsonTags=============="); Map<String, dynamic> mapTags = jsonDecode(jsonTags); List<TagData> tipList = []; mapTags.forEach((key, value) { print("========key:::$key,,,,,value:::$value=============="); tipList.add(TagData() ..title = key ..tips = value.cast<String>()); });
运行成功,到此处理结束.