我想在 JSON 檔案中更深入地了解我需要如何在代碼中進行更改。
因為我需要更深入地了解資料-> 資源-> 專案-> 標題
My JSON:
{
"status":"UPDATE",
"data":{
"version":"2",
"modDate":"2021-12-22T17:33:59 0100",
"languages":[
"DE",
"EN"
],
"mapmarker":[
],
"resources":[
{
"id":241,
"type":"image",
"items":[
{
"lang":"DE",
"title":"Labor",
"file":"uploads\/",
"size":1923217,
"modDate":"2019-02-28T18:07:46 0100"
},
{
"lang":"EN",
"title":"Faust Labor",
"file":"uploads\/",
"size":1923217,
"modDate":"2019-02-28T18:07:46 0100"
}
]
},
我的不作業代碼實際:
Future<void> getDaten() async {
final response =
await http.get(Uri.parse("https://goethemuseum.beacon-cms.de/index.php?id=7&version=2"));
final extractedData = json.decode(response.body) as Map<String, dynamic>;
var deviceData = extractedData["data"] as Map<String, dynamic>;
var deviceData2 = deviceData["resources"] as Map<String, dynamic>;
deviceData["items"].forEach((e)=>print(e["text"]));
}
我現有的錯誤:
Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>' in type cast
我只能去資料->資源->專案,然后我只能得到這樣的字串
[{lang: DE, title: Schmuck, Uhren und Spiele, file: uploads/Spiele.JPG, size: 774265, modDate: 2021-12-13T16:04:25 0100}]
uj5u.com熱心網友回復:
如果您想提取titles資源中所有專案的所有內容,您可以執行類似的操作。請注意,我們不需要強制轉換我們正在使用的每一個值,因為這dynamic意味著 Dart 應該忽略我們對物件所做的事情,并期望任何呼叫dynamic也是dynamic:
import 'dart:convert';
void main() {
dynamic jsonObject = jsonDecode(jsonString);
final titles = [
for (Map<String, dynamic> resource in jsonObject['data']['resources'])
for (Map<String, dynamic> item in resource['items'])
item['title'] as String
];
titles.forEach(print);
// Labor
// Faust Labor
}
const jsonString = '''{
"status": "UPDATE",
"data": {
"version": "2",
"modDate": "2021-12-22T17:33:59 0100",
"languages": [
"DE",
"EN"
],
"mapmarker": [
],
"resources": [
{
"id": 241,
"type": "image",
"items": [
{
"lang": "DE",
"title": "Labor",
"file": "uploads\/",
"size": 1923217,
"modDate": "2019-02-28T18:07:46 0100"
},
{
"lang": "EN",
"title": "Faust Labor",
"file": "uploads\/",
"size": 1923217,
"modDate": "2019-02-28T18:07:46 0100"
}
]
}
]
}
}
''';
uj5u.com熱心網友回復:
在您的函式下面的行中
var deviceData = extractedData["data"] as Map<String, dynamic>;
var deviceData2 = deviceData["resources"] as Map<String, dynamic>;
正在導致錯誤,因為在您的 API 中extractedData["data"]是returning您,List但您正在轉換它,因為Map<String, dynamic>這就是它拋出錯誤的原因。要像這樣解決這種使用:
var deviceData = extractedData["data"];
var deviceData2 = deviceData["resources"];
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/405277.html
標籤:
