你好,我正在尝试将 nestedJson 检索到 dart,主要我将使用具有类似数据嵌套 Json 的 API 调用,因此下面是我尝试的示例,看看它是否有效。所以我的主要问题是我没有得到预期的输出。下面提到的是我的代码文件,如果这看起来是错误的或乏味的,请指导我正确的方法。
预期产出: | 我得到的输出: |
---|---|
达斯塔吉尔 | 达斯塔吉尔 |
三十四 | 三十四 |
上海 | 上海 |
[] | [] |
============ | ============ |
中国 | |
孟加拉国 |
main.dart
void main() {
var myMap = {
"name": "dastagir",
"age": 34,
"city":"Shangai",
"address": [
{ // Map 1
"country": "china",
"city": "Shanghai"
},
{ // Map 2
"country": "Bangaldesh",
"city": "Dhaka"
},
]
};
var obj = Person.fromJson(myMap);
print(obj.name);
print(obj.age);
print(obj.city);
print(obj.address);
print("=======================================");
var myAddress = obj.address;
myAddress!.map((e){
print(e.country);
}).toList();
}
nested_json.dart
class Person{
String? name;
int? age;
String? city;
List<Address>? address;
Person({this.name, this.age, this.city, this.address});
Person.fromJson(Map<String, dynamic> json){
name = json['name'];
age = json['age'];
city = json['city'];
if(json['address']!=null){
address=<Address>[];
}
else{
(json['address'] as List).forEach((e){
address!.add(Address.fromJson(e));
});
}
}
}
// this is for inner Json List
class Address{
String? country;
String? city;
Address({this.country, this.city});
Address.fromJson(Map<String, dynamic> json){
country = json['country'];
city = json['city'];
}
}`
您正在使用
print
函数map
,但print
返回void
。map
用于将一种类型映射到另一种类型,而不是用于无效操作。最好使用
forEach
或者
for loop
[从评论中提取答案以提高可见性......]
我认为您的错误在这里:
json['address']!=null
。如果您有项目,您将地址设置为空列表,但从未添加单个地址。如果您没有项目,该代码可能会崩溃。解决方案是修复布尔条件,让它们做正确的事情。用一个空列表初始化,然后对于存在的每个项目,将其添加到列表中。