Дротик 2 и разбор json - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь разобрать json в список продуктов, используя Dart 2 для веб-сайтов.

У меня есть следующий класс:

class Product {

  final String Problem;

  final String Owner;

  final String Description;

  const Product({
    this.Problem, 
    this.Owner,
    this.Description,
  });


  factory Product.parse(Map<String, dynamic> json) {
    print(json);
    return new Product(
      Problem: json["Problem"],
      Owner: json["Owner"],
      Description: json["Description"]
    );
  }
}

И я пытаюсь проанализировать это с помощью:

Stream<Product> getProducts() async* {
    final payload = await HttpRequest.getString("products.json");
    print(payload);
    //var _json = (json.decode(payload));
    print("break");
    var list = json.decode(payload);
    print(list);
    //print(list);
    final productList = (json.decode(payload) as List).cast<Map<String, dynamic>>();

  }

Однако эта ошибка завершается с этой ошибкой:

ИСКЛЮЧЕНИЕ: тип '_JsonMap' не является подтипом ожидаемого типа 'Список'.

Я вижу, что у меня list[Symbol(_original)] при отладке, но когда я пытаюсь оценить это, я возвращаюсь как неопределенное.

Я также пытался

  • List list = json.decode(payload) as List;
  • List<dynamic> list = json.decode(payload);
  • List<dynamic> list = json.decode(payload) as List<dynamic>;
  • var list = (json.decode(payload)).cast<Map<String, dynamic>>();
  • var list = (json.decode(payload)).cast<Map<dynamic, dynamic>>();

, но выдается та же ошибка.

Json

{
    "Product_One": {
        "Owner": "test",
        "Description": "test description",
        "Theme_Objective": "test objective",
        "Technical_details": "test technical details",
        "Problem": "test",
        "Solution": "test"
    }
}

1 Ответ

0 голосов
/ 21 мая 2018

Ваш JSON не содержит никакого списка, это все карты.Когда вы пытаетесь разыграть Map до List, он должен потерпеть неудачу, поскольку карты не являются списками.

Возможно, вы захотите сделать:

final productList = (jsonDecode(payload) as Map).values.toList();

Это даст вам списоккарт продуктов, без названий, которые вы, похоже, не используете.

...