본문 바로가기
Flutter/Flutter FAQ

Flutter 처리되지 않은 예외: 'InternalLinkedHashMap<String, dynamic>'은(는) 'List<dynamic>' 유형의 하위 유형이 아닙니다., Unhandled Exception: InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>

by 베타코드 2023. 6. 1.
반응형

질문


나는 서버에서 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 가지입니다:

  1. 응답이 다음과 같은 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은 원하는 객체 (내장 또는 사용자 정의) 일 수 있지만 이름 속성이있는지 확인하십시오.

  2. 응답이 다음과 같은 JSON 객체 인 경우

    {
        dataKey: [
          {
            key1: value1,
            key2: value2,
            key3: value3,
          } 
        ] 
    }
    

    그런 다음 json.decodeMap을 반환하며 List가 아닙니다.

    Map<String, dynamic> map = json.decode(response.body);
    List<dynamic> data = map["dataKey"];
    print(data[0]["name"]);
    
반응형

댓글