json - 如何将 json 数组解析为 dart 中的列表?
问题描述
至于下面的脚本,我有两个不同的 json 用于单个记录和多个记录作为列表。Person
我可以使用该类解析单个数据。对于带有列表的 json,我正在使用该类,但由于不再需要PersonList
json 键而出现错误。result
有没有办法在不更改Person
类的情况下解析列表?还是我不应该使用PersonList
该类而只创建一个List<Person>
?
我看到了这个例子,但它只有在 json 是这样的整个列表时才有效
var jsonResponse = convert.jsonDecode(rawJsonMulti) as List;
return jsonResponse.map((p) => Person.fromJson(p).toList();
你能告诉我如何使用我的json来使用上面的脚本吗?谢谢。
import 'dart:convert';
void main() {
String rawJsonMulti = '{"result": [{"name":"Mary","age":30},{"name":"John","age":25}]}';
String rawJsonSingle = '{"result": {"name":"Mary","age":30}}';
// Working for non list json
// final result = json.decode(rawJsonSingle);
// var obj = Person.fromJson(result);
// print(obj.name);
final result = json.decode(rawJsonMulti);
var obj = PersonList.fromJson(result);
print(obj.listOfPerson[0].name);
}
class PersonList {
final List<Person> listOfPerson;
PersonList({this.listOfPerson});
factory PersonList.fromJson(Map<String, dynamic> json) {
var personFromJson = json['result'] as List;
List<Person> lst =
personFromJson.map((i) => Person.fromJson(i)).toList();
return PersonList(listOfPerson: lst);
}
}
class Person {
String name;
int age;
//will only work on result is not a list
Person({this.name, this.age});
factory Person.fromJson(Map<String, dynamic> json) {
return Person(name: json['result']['name'],
age: json['result']['age']);
}
// This will work on json with list but not in single
// factory Person.fromJson(Map<String, dynamic> json) {
// return Person(name: json['name'],
// age: json['age']);
// }
}
解决方案
如果将 转换dynamic
为 a List<dynamic>
,则可以映射 jsonDecoded 列表中的每个元素。
例子:
import 'dart:convert';
final decodedJson = jsonDecode(rawJsonMulti) as List<dynamic>;
final personList = decodedJson
.map((e) => Person.fromJson(
e as Map<String, dynamic>))
.toList();
return PersonList(listOfPerson: personList);
```
推荐阅读
- python - 根据另一列的值提取一个单元格的值 - Pandas / Python
- android - 在 RecyclerView 水平滚动上使用动画滑动 ViewPager - Android
- javascript - 我如何在前端 js 变量中使用车把数据
- angular - Angular 6:Renderer 2 - 使用 Renderer2 渲染自定义组件不起作用
- r - 将 tibble 中的每一行转换为列标题
- django - 没有证词与给定的查询匹配
- laravel-5.7 - Laravel 5.7,登录重定向回登录
- shopify - 如何将脚本添加到 shopify 应用程序的前端
- java - 在spring boot rest api中将图像发送到角度客户端?
- spring-boot - 更多关于使用 keycloak-spring-security-adapter 的 CLOSE_WAIT