一尘不染

未处理的异常:InternalLinkedHashMap'不是'List类型的子类型

flutter

我正在尝试从服务器获取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的子类型

可能是什么原因?


阅读 261

收藏
2020-08-13

共1个答案

一尘不染

这有两种可能会出错的常见方法:

  1. 如果您的响应是一个json对象,例如
    [
    {
      key1: value1,
      key2: value2,
      key3: value3,
    },
    {
      key1: value1,
      key2: value2,
      key3: value3,
    },
    
    .....
    

    ]

然后,我们使用 data[0]["name"] ,而不是, data[0].name
除非我们强制转换为具有name属性的对象,否则我们将无法使用 data[0].name

我们这样投data = json.decode(response.body).cast<ObjectName>();

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

  1. 如果您的响应是一个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"]);
2020-08-13