当前位置:网站首页>json解析服务器List数据问题
json解析服务器List数据问题
2022-08-05 18:46:00 【开发_李行】
服务器端返回数据:
[{"title":"空间","tags":["矩形房间","干湿分离","多开间进深"]},{"title":"手法","tags":["砖墙","铝膜","木模"]},{"title":"特征","tags":["落地窗","飘窗","普通窗","降板"]},{"title":"建筑","tags":["高层","别墅","复式","联排"]}]
自定义Bean对象如下:
class TagData {
String title = "";
List<String> tags = [];
TagData();
TagData.fromJson(Map<String, dynamic> map) {
this.title = map["title"];
this.tags = (map["tags"] as List).map((e) => e.toString()).toList();
}
Map<String, dynamic> toJson() => <String, dynamic>{"title": this.title, "tags": this.tags};
}为方便使用自定义字符串接收服务器端返回的数据(十几种可以直接转换,可能不需要)
String jsonData=[{"title":"空间","tags":["矩形房间","干湿分离","多开间进深"]},{"title":"手法","tags":["砖墙","铝膜","木模"]},{"title":"特征","tags":["落地窗","飘窗","普通窗","降板"]},{"title":"建筑","tags":["高层","别墅","复式","联排"]}];
方法一、推荐解析如下:
List<dynamic> tagDataList1 = jsonDecode(jsonData);//不建议直接使用List<TagData>接收,要先过渡一下
List<TagData> tagDataList2 = tagDataList1.map((e) => TagData.fromJson(e)).toList();
//检验结果
tagDataList2.forEach((tagData) {
print("=======tagData标题:::${tagData.title}==============");
List.generate(tagData.tags.length, (index) => print("=======tagData[$index]:::${tagData.tags[index]}=============="));
});结果如下:

到此处理结束.
方法二、我开始在解析的时候没有想到要过渡一下,直接使用List<TagData> 接收的
List<TagData> tagDataList1 = jsonDecode(jsonData);
tagDataList1.forEach((tagData) {
print("=======tagData标题:::${
tagData["title"]}==============");
List.generate(tagData["tags"].length, (index) => print("=======tagData[$index]:::${
tagData["tags"][index]}=============="));
});结果也同方法一一样,这里代码不同之处在于要使用tagData["title"],tagData["tags"],而不是tagData.title,tagData.tags.这是因为Map还没转换成TagData对象,方法一中的过渡就是将Map转换成TagData对象.
方法二没有方法一使用起来方便.
方法三、开始还想到过另外一种方法,当时是因为还不清楚解析List<对象>的数据,就想着外面再套一层,使得对象中有一个数组字段,完整model如下:
class TagList {
TagList();
List<TagData> list = [];//这里的list要与服务端统一,一般情况下会叫data,我这里只是模拟
TagList.fromJson(Map<String, dynamic> map) {
this.list = (map["list"] as List).map((e) => TagData.fromJson(e)).toList();
}
Map<String, dynamic> toJson() => <String, dynamic>{"list": this.list};
}
class TagData {
String title = "";
List<String> tags = [];
TagData();
TagData.fromJson(Map<String, dynamic> map) {
this.title = map["title"];
this.tags = (map["tags"] as List).map((e) => e.toString()).toList();
}
Map<String, dynamic> toJson() => <String, dynamic>{"title": this.title, "tags": this.tags};
}对于fromJson和toJson的理解这个链接有说明:https://blog.csdn.net/qq_34707150/article/details/125440101
使用代码:
String jsonData={"list":[{"title":"空间","tags":["矩形房间","干湿分离","多开间进深"]},{"title":"手法","tags":["砖墙","铝膜","木模"]},{"title":"特征","tags":["落地窗","飘窗","普通窗","降板"]},{"title":"建筑","tags":["高层","别墅","复式","联排"]}]}=================
TagList tagList1 = TagList.fromJson(jsonDecode(jsonData));
tagList1.list.forEach((element) {
print("=======element:::${element.title}==============");
List.generate(element.tags.length, (index) => print("=======element[$index]:::${element.tags[index]}=============="));
});运行也能得到方法一的结果,这个就有点小麻烦了,又套了一层,本来是不需要的,个人感觉最好的是方法一.
边栏推荐
- Qt样式表之 QSS 语法介绍;QLineEdit、
- 从中序与后序遍历序列构造二叉树
- Analysis of the advantages and disadvantages of LED transparent screen VS conventional display
- 2. Pre-research on related components of the reporting platform (1)----jimuReport
- (c语言)初识结构体
- 第十八天笔记
- [南京大学]-[软件分析]课程学习笔记(二)-IR
- 字节一面:TCP 和 UDP 可以使用同一个端口吗?
- 上新 | 从0到1数据库内核实战教程直播开始啦
- 2022 ciscn China northeast repetition
猜你喜欢

【教程1】疯壳·ARM功能手机-开发板上电教程

现在的Android 开发面试都会问到一些什么?

心脑体漫画版本

在过道里阅读
![[ACTF2020 Freshman Competition]Upload 1](/img/88/53fcd59b15bc0f79741534de6c37bb.png)
[ACTF2020 Freshman Competition]Upload 1

字节一面:TCP 和 UDP 可以使用同一个端口吗?

金仓数据库 KingbaseES V8 GIS 数据迁移方案(5. 第三方通用格式 GIS 数据迁移到 KES)

ArcGIS Pro scripting tool (11)) of the modified layer value symbol annotations

【学术相关】最新整理!绝对不能错过的130个学术网站和26个科研工具

div网页布局(做一个简单网页界面为例)
随机推荐
2022CISCN华东北复现
译文推荐|Apache Pulsar 隔离系列(四):单集群隔离策略
VS环境 -- C语言实用调试技巧
Alibaba billion-level concurrent system design manual has been open source (2022 latest version)
Redis(三)session共享
Orchestrator 对 MGR MySQL Group Replication的支持
EdgeNeXt轻量化学习笔记
一个很好用的中奖概率控制器
2022 ciscn China northeast repetition
现在的Android 开发面试都会问到一些什么?
智慧物流:ZETag云标签如何做到快递包裹防拆防盗?
数据中台建设(十一):数据中台解决方案参考与未来发展方向
直播回顾|7 月 Pulsar 中文开发者与用户组会议
云渲染平台是互联网和云计算的发展产物
(c) meet structure
国标视频云服务EasyGBS如何正确调阅实时录像接口?
金仓数据库 KingbaseGIS使用手册(2. 简介)
第十五天实验
金仓数据库KingbaseES客户端编程接口指南-DCI(3. DCI 工程配置)
QPE更换Logo和相关信息