当前位置: 首页 > 知识库问答 >
问题:

未处理的异常:InternalLinkedHashMap“不是”列表类型的子类型

方承弼
2023-03-14

我试图从服务器获取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!";
  }

未处理的异常:类型“\u InternalLinkedHashMap”

原因可能是什么?

共有3个答案

益何平
2023-03-14

由于没有更改类型,所以它只是一个断言。

您需要使用:

映射['eventType']. cast

Map

你也可以通过这种方式来解决:

Map<String, dynamic> myMap = Map<String, dynamic>.from(/*Your Source*/ );

车辰龙
2023-03-14

你可以使用new Map

郜振国
2023-03-14

以下是两种可能出错的常见方式:

>

  • 如果你的响应是一个json对象,比如

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

    然后,我们使用数据[0][“name”],而不是数据[0]。name除非强制转换到具有name属性的对象,否则无法使用数据[0]。名称

    我们像这样强制转换data=json。解码(response.body)。铸造

    ObjectName可以是您想要的任何对象(内置或自定义)。但是要确保它有name属性

    如果您的响应是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"]);
    

  •  类似资料: