json解析服务器Map数据问题

服务器有个字段如下:

"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>());
});

运行成功,到此处理结束.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值