как преобразовать значение Json в список <String>во флаттере - PullRequest
1 голос
/ 04 августа 2020

это мой ответ API, я хочу, чтобы все названия зданий были в списке строк

{
    "entity_id": "86",
    "building_name": "Burj Khalifa",
    "location": "Al  Ttay",
    "image_field": "1595916594oad.jpeg"
},
{
    "entity_id": "87",
    "building_name": "Azmair",
    "location": " Eyal Nasser ",
    "image_field": "1596541099s.jpeg"
},

]

Я пробовал это, но не работает

List<String> _buildlist = (jsonDecode(response['building_name']) as List<dynamic>).cast<String>();
print(_buildlist);

Ответы [ 4 ]

3 голосов
/ 04 августа 2020

Вам нужно декодировать JSON, затем map каждый элемент в соответствующую строку и преобразовать их в список:

  var decoded = json.decode(j) as List;
  var names = decoded.map<String>((e) => e['building_name']).toList();
  print(names); // prints [Burj Khalifa, Azmair]
0 голосов
/ 05 августа 2020

Вам нужно сначала преобразовать JSON в список карт. используя json .decode (). Затем выполните итерацию по списку карт, чтобы создать новый список названий зданий. Не забудьте явно объявить как можно больше переменных и сократить использование ключевого слова var. Это помогает компилятору быстрее компилировать программу и повышает читаемость кода.

В приведенном ниже коде показан мой подход:

import 'dart:convert';
void main() {
  
 var response =[
    {
    "entity_id": "86",
    "building_name": "Burj Khalifa",
    "location": "Al  Ttay",
    "image_field": "1595916594oad.jpeg"
    },
    {
    "entity_id": "87",
    "building_name": "Azmair",
    "location": " Eyal Nasser ",
    "image_field": "1596541099s.jpeg"
    },
 ];
 List<String> _buildlist = List();
 List<Map<String,String>> data = json.decode(response);
 for(Map<String,String> i in data)
    _buildlist.add(i["building_name"]);

 print(_buildlist);
}
0 голосов
/ 05 августа 2020

Сначала вам нужно получить все значения поля в списке массивов. для этого сначала нужно проанализировать все ответы. Создайте соответствующий класс модели для любого ответа, используйте app.quicktype.io . вот класс модели из app.quicktype.io,

import 'dart:convert';

List<ParseResponse> parseResponseFromJson(String str) => List<ParseResponse>.from(json.decode(str).map((x) => ParseResponse.fromJson(x)));

String parseResponseToJson(List<ParseResponse> data) => json.encode(List<dynamic>.from(data.map((x) => x.toJson())));

class ParseResponse {
    ParseResponse({
        this.entityId,
        this.buildingName,
        this.location,
        this.imageField,
    });

    String entityId;
    String buildingName;
    String location;
    String imageField;

    factory ParseResponse.fromJson(Map<String, dynamic> json) => ParseResponse(
        entityId: json["entity_id"],
        buildingName: json["building_name"],
        location: json["location"],
        imageField: json["image_field"],
    );

    Map<String, dynamic> toJson() => {
        "entity_id": entityId,
        "building_name": buildingName,
        "location": location,
        "image_field": imageField,
    };
}

Теперь, если вы вызовете parseResponseFrom Json (резонансная строка); тогда у вас будет список, и вы сможете go отсюда.

0 голосов
/ 05 августа 2020

Попробуйте следующее, используя пакет 'dart: convert':

import 'dart:convert';

void main() {
  
  var json = '''[
    {
      "id":"67890",
      "name":"Hello World",
      "score" : 1000
    },
    {
      "id":"12345",
      "name":"Hello Sky",
      "score" : 2000
    }
  ]''';
  
  print('json is $json');
  var users = jsonDecode(json);
  assert(users is List);
  print('users is $users');
}

Вы можете запустить код в https://dartpad.dev/ и протестировать

...