首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历对象数组

遍历对象数组
EN

Stack Overflow用户
提问于 2020-01-21 21:48:22
回答 3查看 1.2K关注 0票数 0
代码语言:javascript
复制
{
"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

  • Jeans
    • 裸牛仔牛仔裤
    • Levis

EN

回答 3

Stack Overflow用户

发布于 2020-01-21 22:04:59

通用解决方案

这是一个对象,而不是一个列表,所以您不能直接将它插入循环中。如果您想循环遍历所有的值和子值,则必须递归地执行。

代码语言:javascript
复制
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结构,那么您可以获取所有想要的位,并设置一些嵌套的循环。

代码语言:javascript
复制
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);
  }
}
票数 1
EN

Stack Overflow用户

发布于 2020-01-21 22:14:45

您拥有的是纯JSON。您需要首先将其转换为Dart对象。

有几种方法可以完成转换。我发现最简单的方法是使用一个在线转换器,比如这个网站:https://app.quicktype.io/

在将JSON转换为对象之后,您可以像这样遍历它:

代码语言:javascript
复制
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);
 });
}
票数 1
EN

Stack Overflow用户

发布于 2020-01-22 03:17:45

只需使用省道:转换库和json.decode。那就访问你想要的json中的任何东西。我修正了您的JSON,因为它没有正确设置,这是完整的解决方案。

代码语言:javascript
复制
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"]);
  }
}

输出:

代码语言:javascript
复制
--COOL SHIRTS--
Demin Shirt
Random Shirt

--COOL JEANS--
Bare Denim Jeans
Levis jeans
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59849677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档