繁体   English   中英

如何从 flutter 中的单个 json 获取键列表和值列表

[英]how to get list of keys and list of value from a single json in flutter

我有一个 json

{
    "result": [
        {
            "id": 2,
            "e_id": 2,
            "e_name": "0",
            "abc": 0,
            "doa": "2021-02-15 13:17:11"
        },
        {
            "id": 3,
            "e_id": 22,
            "e_name": "ok",
            "abc": 1,
            "doa": "2021-02-15 13:17:57"
        }
    ],
    "status": 1,
    "msg": "Successfully fetched"
}
.


How i want two list like 

    List keyList=[
    "id","e_id","e_name","abc","doa"];

and 

    List valueList=[
    {
    2, 2,"0",0,"2021-02-15 13:17:11"
    },
    {
    3, 22,"ok",1,"2021-02-15 13:17:57"
    }
    ];

有谁能帮帮我吗?? 如何获取键列表和值列表,两者都是单独的列表,仅从上面给出的单个 json 中获取。

这是我的 model 类---

class DataModel {
  List<Result> result;
  int status;
  String msg;

  DataModel({this.result, this.status, this.msg});

  DataModel.fromJson(Map<String, dynamic> json) {
    if (json['result'] != null) {
      result = new List<Result>();
      json['result'].forEach((v) {
        result.add(new Result.fromJson(v));
      });
    }
    status = json['status'];
    msg = json['msg'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    if (this.result != null) {
      data['result'] = this.result.map((v) => v.toJson()).toList();
    }
    data['status'] = this.status;
    data['msg'] = this.msg;
    return data;
  }
}

class Result {
  int id;
  int eId;
  String eName;
  String abc;
  String doa;

  Result(
      {this.id,
        this.eId,
        this.eName,
        this.abc,
        this.doa});

  Result.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    eId = json['e_id'];
    eName = json['e_name'];
    abc= json['abc'];
    doa = json['doa'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['id'] = this.id;
    data['e_id'] = this.eId;
    data['e_name'] = this.eName;
    data['abc'] = this.abc;
    data['doa'] = this.doa;
    return data;
  }
}

我不需要 model 映射,我只需要两个不同的列表 - 一个是 keyList,另一个是 valuelist 形式的结果。 请帮助我获取此列表

  Map<String, dynamic> json ={
"result": [
{
"id": 2,
"e_id": 2,
"e_name": "0",
"abc": 0,
"doa": "2021-02-15 13:17:11"
},
{
"id": 3,
"e_id": 22,
"e_name": "ok",
"abc": 1,
"doa": "2021-02-15 13:17:57"
}
],
"status": 1,
"msg": "Successfully fetched"
};

  List<String> keyList;
  List<List<dynamic>> valueList = [];
  json["result"].forEach((entry) {
    keyList ??= entry.keys;
    valueList.add(entry.values);
  });

使用rootBundle.loadString('assets/json_file.json');

然后json.decode(jsonString);

现在可以正常使用了

这是将键和值作为列表提供的代码:

您可以在 dartpad.dev 上复制并试用

import 'dart:convert';

String json = '''
{
    "result": [
        {
            "id": 2,
            "e_id": 2,
            "e_name": "0",
            "abc": 0,
            "doa": "2021-02-15 13:17:11"
        },
        {
            "id": 3,
            "e_id": 22,
            "e_name": "ok",
            "abc": 1,
            "doa": "2021-02-15 13:17:57"
        }
    ],
    "status": 1,
    "msg": "Successfully fetched"
}
''';

void main() {
  Map<String, dynamic> map = jsonDecode(json);
  List<String> keyList = map['result'][0].keys.toList();
  
  List<dynamic> listOfValues = [];
  List<dynamic> valueList = map['result'];
  
  for(int i=0; i < valueList.length; i++) {
    Map<String, dynamic> obj = valueList[i];
    listOfValues.addAll(obj.values);
  }
  
  keyList.forEach(print);
  print('\n\n');
  listOfValues.forEach(print);
}

Output 通过打印 arrays 的每个元素:

id
e_id
e_name
abc
doa



2
2
0
0
2021-02-15 13:17:11
3
22
ok
1
2021-02-15 13:17:57

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM