Доступ к вложенному JSON из Google knowledge API с помощью dart

#json #flutter #api #dart #google-api

Вопрос:

Извините, если об этом спрашивали раньше (я искал именно это, но все еще не могу понять). Я пытаюсь получить доступ к вложенному элементу из API Google knowledge graph. Вот как выглядит JSON

 {  "@context": {  "goog": "http://schema.googleapis.com/",  "kg": "http://g.co/kg",  "EntitySearchResult": "goog:EntitySearchResult",  "resultScore": "goog:resultScore",  "@vocab": "http://schema.org/",  "detailedDescription": "goog:detailedDescription"  },  "@type": "ItemList",  "itemListElement": [  {  "result": {  "name": "Samoyed",  "description": "Dog breed",  "@type": [  "Thing"  ],  "@id": "kg:/m/017lg8",  "detailedDescription": {  "url": "https://en.wikipedia.org/wiki/Samoyed_dog",  "articleBody": "The Samoyed is a breed of medium-sized herding dogs with thick, white, double-layer coats. They are a spitz-type dog which takes its name from the Samoyedic peoples of Siberia.",  "license": "https://en.wikipedia.org/wiki/Wikipedia:Text_of_Creative_Commons_Attribution-ShareAlike_3.0_Unported_License"  }  },  "@type": "EntitySearchResult",  "resultScore": 7775.93505859375  }  ] }  

Мне нужно получить доступ к элементу articleBody. Вот что у меня есть до сих пор в dart:

 Futurelt;Doggt; getWikiInfo() async {  var query = "Samoyed";  var API_KEY = "*************";  final apiURL =  "https://kgsearch.googleapis.com/v1/entities:search?query=$queryamp;key=$API_KEYamp;limit=1amp;indent=True";  final response = await http.get(Uri.parse(apiURL));   if (response.statusCode == 200) {  for (var element in json.decode(response.body)['itemListElement']) {  for (var subelement  in json.decode(response.body)['detailedDescription']) {  print(subelement['articleBody']);  }  }  }  

Я пробовал разные итерации этого, чтобы попытаться вернуть этот элемент. Вот как выглядит мой класс собак.

 class Dog {  final String link;  final String breed;  final String info;  Dog({this.link, this.breed, this.info});   factory Dog.fromJson(Maplt;String, dynamicgt; json) {  return Dog(  breed: json['message'],  link: json['message'],  info: json['articleBody']);  } }  

Комментарии:

1. попробуйте json.decode(response.body)[«Элемент списка элементов»][0][«результат»][«Подробное описание»]

2. Большое вам спасибо!

3. рад помочь вам, пожалуйста, отметьте «голос» и в качестве ответа, если сработает. Спасибо

Ответ №1:

попробуйте этот код последовательности в соответствии с вашей логикой

 json.decode(response.body)["itemListElement"][0]["result"]["detailedDescription"]