我正在尝试从服务器获取JSON响应并将其输出到控制台。
Future<String> login() async { var response = await http.get( Uri.encodeFull("https://etrans.herokuapp.com/test/2"), headers: {"Accept": "application/json"}); this.setState(() { data = json.decode(response.body); }); print(data[0].name); return "Success!"; }
未处理的异常:类型’_InternalLinkedHashMap’不是类型’List的子类型
可能是什么原因?
这有两种可能会出错的常见方法:
[ { key1: value1, key2: value2, key3: value3, }, { key1: value1, key2: value2, key3: value3, }, .....
]
然后,我们使用 data[0]["name"] ,而不是, data[0].name 除非我们强制转换为具有name属性的对象,否则我们将无法使用 data[0].name
data[0]["name"]
data[0].name
我们这样投data = json.decode(response.body).cast<ObjectName>();
data = json.decode(response.body).cast<ObjectName>();
ObjectName 可以是您想要的任何对象(内置或自定义)。但是请确保它具有name属性
ObjectName
{ dataKey: [ { key1: value1, key2: value2, key3: value3, } ]
}
然后json.decode将返回一个 Map ,而不是一个 List
json.decode
Map<String, dynamic> map = json.decode(response.body); List<dynamic> data = map["dataKey"]; print(data[0]["name"]);