【问题标题】:how to get list of keys and list of value from a single json in flutter如何从flutter中的单个json获取键列表和值列表
【发布时间】:2021-06-10 07:10:42
【问题描述】:

我有一个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 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 形式的结果。 请帮助我获取此列表

【问题讨论】:

  • 我有模型类,但我不知道如何获取那些不同的列表
  • 我只是更新我的问题,请检查
  • 查看我的更新答案(完整答案)

标签: json flutter parsing mapping


【解决方案1】:

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

然后json.decode(jsonString);

现在可以正常使用了

【讨论】:

    【解决方案2】:
      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);
      });
    

    【讨论】:

    • json['result']中的'json'是什么??你能像 Pratik 给我的那样提供完整的代码吗
    • 这是来自您 API 的 json。我已经编辑了答案。
    【解决方案3】:

    以下代码将键和值作为列表提供给您:

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

    【讨论】:

    • 结果状态消息 [{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}] 1 成功获取这不是我要找的,检查我的问题
    • 兄弟,它没有合并。我已经单独打印了。
    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 2016-06-20
    • 2021-10-15
    • 2020-10-03
    • 2018-11-29
    • 2012-01-19
    • 2021-11-25
    • 2020-10-28
    相关资源
    最近更新 更多