반응형
질문
나는 서버에서 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!";
}
Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List
이유는 무엇일까요?
답변
다음은 잘못된 경우가 2 가지입니다:
응답이 다음과 같은 json 배열 인 경우
[ { key1: value1, key2: value2, key3: value3, }, { key1: value1, key2: value2, key3: value3, }, ..... ]
그런 다음,
data [0] ["name"]
을 사용합니다.data [0] .name
을 사용할 수 없습니다. 이름 속성이있는 객체로 캐스트하지 않으면 사용할 수 없습니다.이렇게 캐스트합니다.
data = json.decode (response.body) .cast <ObjectName> ();
ObjectName
은 원하는 객체 (내장 또는 사용자 정의) 일 수 있지만 이름 속성이있는지 확인하십시오.응답이 다음과 같은 JSON 객체 인 경우
{ dataKey: [ { key1: value1, key2: value2, key3: value3, } ] }
그런 다음
json.decode
는 Map을 반환하며 List가 아닙니다.Map<String, dynamic> map = json.decode(response.body); List<dynamic> data = map["dataKey"]; print(data[0]["name"]);
반응형
댓글