如何从 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 中获取。

这是我的模型class---

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;
  }
}

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

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

然后是json.decode(jsonString);

现在可以正常使用了

  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);
  });

这是以列表形式为您提供键和值的代码:

您可以在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);
}

通过打印两个数组的每个元素输出:

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