{
"Catalog": {
"shirts": [
{
"id": "93453951-8427394-234723908",
"name": "Demin Shirt",
"price": 100.0,
"category": "Random Category",
"available": true,
},
{
"id": "93453951-8427394-40325978",
"name": "Random Shirt",
"price": 500.0,
"category": "Random Category",
"available": true,
}
],
"Jeans": [
{
"id": "4802345-348579-5983452-23423",
"name": "Bare Denim Jeans",
"price": 2000.0,
"category": "Some Category",
"available": true,
},
{
"id": "143682137-3481293-239842",
"name": "Levis jeans",
"price": 1000.0,
"category": "Some Category",
"available": true,
}
]
}}
我如何遍历这些物品,使我能够显示所有不同类型的衬衫在类别衬衫和所有牛仔裤标题下的牛仔裤。
就像这样:
Shirt
jeans
发布于 2020-01-21 22:04:59
通用解决方案
这是一个对象,而不是一个列表,所以您不能直接将它插入循环中。如果您想循环遍历所有的值和子值,则必须递归地执行。
void recurseObject(dynamic value) {
if (value is List) {
// value is a list, iterate over its children
for (var child in value) {
recurseObject(object);
}
} else if (value is Map) {
// value is an object, iterate over its keys and recurse the corresponding values
for (var key in object.keys) {
print(key);
recurseObject(object[key]);
}
} else {
// value is a primitive, so just print it
print(value);
}
}特定于对象的
如果您的对象有一个set结构,那么您可以获取所有想要的位,并设置一些嵌套的循环。
final catalog = rootObj['Catalog'] as Map<String, Dynamic>;
for (var category in catalog.keys) {
final categoryList = catalog[category] as List<dynamic>;
print(category);
for (var value in categoryList) {
final name = value['name'];
print(name);
}
}发布于 2020-01-21 22:14:45
您拥有的是纯JSON。您需要首先将其转换为Dart对象。
有几种方法可以完成转换。我发现最简单的方法是使用一个在线转换器,比如这个网站:https://app.quicktype.io/
在将JSON转换为对象之后,您可以像这样遍历它:
printCatalog() {
var catalog =
Catalog.fromRawJson("Here's where you need to pass in your JSON");
print("Shirts: ");
catalog.shirts.forEach((shirt) {
print(shirt.name);
});
print("Jeans: ");
catalog.jeans.forEach((jean) {
print(jean.name);
});
}发布于 2020-01-22 03:17:45
只需使用省道:转换库和json.decode。那就访问你想要的json中的任何东西。我修正了您的JSON,因为它没有正确设置,这是完整的解决方案。
import 'dart:convert';
void main() {
var jsonstring = '''{
"Catalog": {
"shirts": [{
"id": "93453951-8427394-234723908",
"name": "Demin Shirt",
"price": 100.0,
"category": "Random Category",
"available": "true"
},
{
"id": "93453951-8427394-40325978",
"name": "Random Shirt",
"price": 500.0,
"category": "Random Category",
"available": true
}
],
"Jeans": [{
"id": "4802345-348579-5983452-23423",
"name": "Bare Denim Jeans",
"price": 2000.0,
"category": "Some Category",
"available": true
},
{
"id": "143682137-3481293-239842",
"name": "Levis jeans",
"price": 1000.0,
"category": "Some Category",
"available": true
}
]
}
}''';
Map<String, dynamic> data = json.decode(jsonstring);
print("--COOL SHIRTS--");
for (var shirt in data["Catalog"]["shirts"]) {
print(shirt["name"]);
}
print("\n--COOL JEANS--");
for (var jeans in data["Catalog"]["Jeans"]) {
print(jeans["name"]);
}
}输出:
--COOL SHIRTS--
Demin Shirt
Random Shirt
--COOL JEANS--
Bare Denim Jeans
Levis jeanshttps://stackoverflow.com/questions/59849677
复制相似问题