Разбор ответа JSON API

API дает мне ответ JSON следующим образом:

{
    "amountCredited":0,
    "isFirstOrder":false,
     "orderItems":[
       {
          "_id":624342e1c66be9001d501230,
          "status":2,
          "pinCode":749326,
          "kioskId":61bb3982089a66001db4ab77,
          "kioskActivityId":620668ad433322b99557c874
          }
       ]
}

Я пытаюсь получить доступ к данным внутри "orderItems", чтобы передать их существующей модели синтаксического анализа в приложении.

order = OrderItemModel.fromJson(response.body['orderItems'] as Map<String, dynamic>);

но поскольку данные внутри orderItems ответа JSON находятся внутри множество, я не могу получить к ним доступ таким образом..

Как я могу получить к нему доступ, зная, что этот массив JSON "orderItems" всегда будет иметь только один элемент в качестве ответа?


Что-то вроде response.body['orderItems' : [0]] позволит мне получить доступ к данным первого элемента?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
3
0
37
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поскольку вы всегда знаете, что в массиве всегда будет только один элемент. Сначала мы сделаем его списком, а затем получим доступ к первому элементу.

order = OrderItemModel.fromJson((response.body['orderItems'] as List<dynamic>).first as Map<String, dynamic>);

Чтобы понять это немного лучше, обратитесь к коду ниже:

Ответ JSON содержит массив, к которому нам нужно получить доступ.

final ordersArray = response.body['orderItems'] as List<dynamic>;

Затем мы хотим получить доступ к первому заказу (согласно вопросу)

final firstOrder = ordersArray.first as Map<String, dynamic>;

Как только у нас будет заказ, мы преобразуем его в модель

final order = OrderItemModel.fromJson(firstOrder);

Обновлено: как было указано в комментарии Объекты списка имеют геттер с именем first, который можно использовать для получения первого элемента, код был обновлен с учетом этого.

Также на каждом List есть вспомогательный объект, который называется первый. Вы получаете первый заказ так: ordersArray.first. В отличие от использования индекса 0. Оба подхода вернут одни и те же данные.

daddygames 29.03.2022 20:56

Я чувствую, что решение, предложенное @daddygames, выглядит лучше, я обновлю свой ответ этим.

Advait 29.03.2022 20:57

Вам нужно конвертировать как Map и List, потому что Flutter работает только с этими типами данных. Например:

Map order1 = {
          "_id":"624342e1c66be9001d501230",
          "status":2,
          "pinCode":749326,
          "kioskId":"61bb3982089a66001db4ab77",
          "kioskActivityId":"620668ad433322b99557c874"
          };
  Map order2 = {
          "_id":"224342e1c66be9001d501232",
          "status":1,
          "pinCode":248023,
          "kioskId":"41bb3982089a66001db4ab74",
          "kioskActivityId":"720668ad433322b99557c875"
          };
  Map m = {
    "amountCredited":0,
    "isFirstOrder":false,
     "orderItems":[
       order1,
       order2
       ]
};
  
  
  print(m['orderItems'][1]);
  print(m['orderItems'][1]['pinCode']);

Результат будет:

 {_id: 224342e1c66be9001d501232, status: 1, pinCode: 248023, kioskId: 41bb3982089a66001db4ab74, kioskActivityId: 720668ad433322b99557c875}
248023

Другие вопросы по теме