如何在Dart中查找大型JSON文件中的值

时间:2019-01-04 12:05:37

标签: json list dictionary dart flutter

我有一个大型JSON文件,其中包含许多具有许多属性的对象。简化的结构如下所示:

"allGadgets": [
      {
        "Model Code": "nokia1",
        "Top Category": "Mobile Phones",
        "Category": "non-iPhone",
        "Brand": "Nokia",
        "Device": "1",

        "Price": "£ 11"
      },
      {
        "Model Code": "nokia2",
        "Top Category": "Mobile Phones",
        "Category": "non-iPhone",
        "Brand": "Nokia",
        "Device": "2",

        "Price": "£ 17",
      },
      {
        "Model Code": "nokia3",
        "Top Category": "Mobile Phones",
        "Category": "non-iPhone",
        "Brand": "Nokia",
        "Device": "3",

        "Price": "£ 10",

      }] ... plus a few hundreds more of different brands and models

我正在从地图的json列表中提取一个字符串列表供搜索面板使用,以便用户查找其设备。字符串由json中的两个值组成,即:"${item['Brand']} - ${item['Device']}"

一旦用户从下拉搜索面板中选择了相关模型,我就需要使用此字符串值为他们提供json文件中的价格。问题是如何在飞镖/颤振中实现该目标?如果是html / css,我会添加一个额外的隐藏的模型代码字段和/或价格本身,然后使其可见。

但是,在flutter / dart中,我发现一个搜索面板插件仅接受字符串,用户可以选择该字符串,然后将其用于在json文件中查找相应的价格值。

使查询复杂化的事实是,我的字符串现在由两个字段值组成,中间有空格和连字符,因此我可能需要将它们转换回字符串转换之前的状态,然后将两者用于查找...听起来很复杂...

任何关于如何解决上述任务的想法都将受到欢迎!

我想会很有帮助的一个例子是-在具有许多对象的json中使用字符串(由对象的两个值组成)查找对象。向用户显示了这些对象的子集,但仅看到其中的几个字段。然后,用户根据这两个字段使用显示给他的字符串有效地选择一个查询。然后,该String允许查找对象并在该对应对象中找到另一个值(价格)...

1 个答案:

答案 0 :(得分:0)

解码了json后,您有ListMap中的一个。制作一个新数据结构,该结构是MapMap(即Map<String, Map<String, dynamic>>)中的一个。通过添加Map的每个成员(以品牌/设备名称作为关键字)来填充新的List。现在,您可以通过该组合名称直接查找设备详细信息。

List<Map<String, dynamic>> original;
Map<String, Map<String, dynamic>> data = {};

original.forEach((item) {
  String brandDeviceName = '${item['Brand']} - ${item['Device']}';
  data[brandDeviceName] = item;
});