Обход массива объектов - PullRequest
0 голосов
/ 22 января 2020
{
"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,
       }
    ]
}

}

Как пройти через этот массив объектов, чтобы я мог отображать все типы рубашек под категорией рубашки и все джинсы под рубрикой джинсов.

Примерно так:

  • Рубашки
    • Джинсовая рубашка.
    • Случайная рубашка
  • Джинсы
    • Джинсы Bare Denim
    • Джинсы Levis

Ответы [ 3 ]

1 голос
/ 22 января 2020

То, что у вас есть, есть чистое 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);
 });
}
1 голос
/ 22 января 2020

Generi c Решение

Это объект, а не список, поэтому вы не можете просто подключить его к al oop. Если вы хотите выполнить l oop через все значения и под-значения, вам придется сделать это рекурсивно.

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);
  }
}


Specifi c до вашего объекта

Если ваш объект имеет заданную структуру, вы можете просто взять все нужные биты и настроить несколько вложенных циклов.

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);
  }
}
0 голосов
/ 22 января 2020

Просто используйте dart: convert library и 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 jeans
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...