編輯:在我再次檢查后,因為這是串列中物件內的一個欄位,結果在串列中的某處,一個物件確實具有 "data": {}
封閉式問題。謝謝你的幫助。
我有一個包含空陣列內容的 json 欄位:
{
"data": [ ]
}
問題是當我試圖將它放入一個串列中時,它變得不合時宜。
List<dynamic> result = json["data"];
type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'
當我看到它是“內部鏈接哈希映射”時,我想也許我可以使用映射。所以我將接收器型別更改為 Map。
Map<String, dynamic> result = json["data"];
type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
為什么會這樣?
我最終可以解決此問題的唯一方法是創建一個型別推斷變數作為中間變數:
var temp = json["data"];
print("temp's runtime type: ${temp.runtimeType}"); // List<dynamic>
List<dynamic> result = temp; // works
我知道現在使用變通方法解決了這個問題,但我只想知道為什么上面的嘗試是錯誤的,以及如何將 json 欄位內容直接分配給顯式型別的變數。
uj5u.com熱心網友回復:
首先,您只需檢查您的資料是否為空,然后將值分配給您的地圖。
Map<String, dynamic> result;
if(json["data"]!=null && json["data"].isNotEmpty){
result = json["data"];
}
uj5u.com熱心網友回復:
Dart 編譯器認為結果可能為空,因此它會拋出錯誤,如果您確定它不會為空,那么您可以這樣做。
//This json is of type Map<String, List<dynamic>>
final json = {"data": []};
if (json["data"] != null) {
// i have used ! operator here after ["data"]
List l = json["data"]!;
}
或者如果您不確定資料,那么您可以使用@Jahidul Islam 顯示的內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/366614.html
