Как извлечь список объектов в объектах из json во флаттере? - PullRequest
0 голосов
/ 04 мая 2020

Как мне извлечь список объектов из json?

Я получаю json, в котором есть список объектов - я обрабатываю их без проблем, я создаю список объекты, такие как комментарий комментарий и один подкоммент):

{
   "item_comments":[
      {
         "resource_name":"item_comment",
         "id":805694,
         [...]
         "created_by":{
            "resource_name":"user",
            [...]
         },
         "comments":[
            {
               "resource_name":"item_comment",
               "id":806885,
               "parent_id":805694,
               [...]
               },
               "comments":[

               ]
            }
         ]
      }
   ],
   "item_commnets_count":1
}

Я обрабатываю список комментариев следующим образом:

Future <void> _picComments(int picId) {
        return getComments(picId).then((response) {
            setState(() {
                Map<String, dynamic> map = json.decode(response.body);
                Iterable list = map['item_comments'];
                comments = list.map((model) => Comment.fromJson(model)).toList();
            });
        });
    }

Моя модель выглядит следующим образом:

    class Comment {
    int id, parentId, [...];
    String content, [...];
    bool isVoted, isAnswer;


    Comment(
        this.id,
        this.parentId,
        this.content,
        [...]
        );

    Comment.fromJson(Map json)
        :   id = json['id'],
            parentId = json['parent_id'],
            content = json['content'],
            [...];
}

Но я не знаю, как извлечь список подкомментариев

Но если я добавлю к нему:

List<Comment> subComments;
subComments = json['comments'],

Тогда я ошибаюсь.

РЕДАКТИРОВАТЬ: У меня есть ответ чтобы спросить. Вместо

comment = json['comments']

я пишу:

comments = List()..addAll(
                (json['comments'] as List ?? []).map((o) => Comment.fromJson(o)))

ЭТО РАБОТАЕТ! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...