Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何解析JSON数据_Flutter_Dart - Fatal编程技术网

Flutter 如何解析JSON数据

Flutter 如何解析JSON数据,flutter,dart,Flutter,Dart,我正在编写一个flatter方法,其中我想解析一个简单的JSON数据 {"alm":3,"co2":1,"hu":2,"temp":32,"th":11,"tm":31,"ts":41} 我试图在一个简单的get类中解析它 List data; Future<String> getData() async { http.Respon

我正在编写一个flatter方法,其中我想解析一个简单的JSON数据

{"alm":3,"co2":1,"hu":2,"temp":32,"th":11,"tm":31,"ts":41}
我试图在一个简单的get类中解析它

List data;
  Future<String> getData() async {
    http.Response response = await http.get(
        Uri.encodeFull("http://chicken20.pythonanywhere.com/jsonn"),
        headers: {"Accept": "application/json"});
    print(response.body);
    data = json.decode(response.body);
    print(data);
    return "Success!";
我犯了这个错误

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: type '_InternalLinkedHashMap<String, dynamic>' is not a subtype of type 'List<dynamic>'
[错误:flatter/lib/ui/ui\u dart\u state.cc(157)]未处理的异常:类型“\u InternalLinkedHashMap”不是类型“List”的子类型

屏幕上没有显示任何内容

您的Url是json格式的。您确定吗?

您将从API中获得一个
映射。您不能在
ListView.builder
上使用它。您可以使用常规的
列表视图
,手动添加列表互动程序

创建
ListView
,并使用地图中的每个键手动添加ListTile

body:ListView(
儿童:[
buildTile(“alm”),
建筑地砖(“co2”),
buildTile(“hu”),
buildTile('temp'),//为其他人继续此操作
],
),
创建要在
列表视图中使用的
列表互动程序

buildTile(字符串键){
返回列表块(
前导:常量图标(图标。保持主图标),
标题:文本(“$key”),
字幕:文本(“${data['$key']}”),
尾随:图标(图标。更多垂直),
是的,
伊斯特里琳:是的,
);
}

首先,API的响应不是json列表,而是一个简单的json对象。 如果要迭代上述对象的键,可以创建一个包含所有键的列表,然后使用键索引在响应中获取实际的键名

final List<String> keys = ["alm","co2","hu","temp","th","tm","ts"];

希望这有帮助

是,当我打印response.body时,它会在控制台中显示响应来自API的数据是一个
映射
,您正试图将其分配到
列表
,并在
列表视图
中使用。你想实现什么?如果你尝试进入链接,你会发现一个小的json数据,我想在列表视图中显示它,数据似乎是一个地图。您不能在列表视图中显示它可能您希望在
列表互动程序中显示它,而不是在
列表视图中显示它是的就是这样
final List<String> keys = ["alm","co2","hu","temp","th","tm","ts"];
body: new ListView.builder(
        itemCount: data == null ? 0 : data.length,
        itemBuilder: (BuildContext context, int index) {
          return new ListTile(
            leading: const Icon(Icons.stay_primary_portrait),
            title: Text(data.length.toString()),
            subtitle: Text(data[keys[index]]),
            trailing: Icon(Icons.more_vert),
            dense: true,
            isThreeLine: true,
          );
        },
      ),