【问题标题】:How to look up values in a large JSON file in Dart如何在 Dart 中查找大型 JSON 文件中的值
【发布时间】:2019-05-31 00:12:54
【问题描述】:

我有一个大型 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 文件中为他们提供价格。问题是我如何在 dart/flutter 中实现这一点?如果它是 html/css,我会添加一个模型代码和/或价格本身的额外隐藏字段,然后让它可见。

然而,在 flutter/dart 中,我发现的一个搜索面板插件只接受字符串,用户选择该字符串,然后必须使用该字符串在 json 文件中查找相应的价格值。

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

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

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

【问题讨论】:

    标签: json list dictionary dart flutter


    【解决方案1】:

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

    List<Map<String, dynamic>> original;
    Map<String, Map<String, dynamic>> data = {};
    
    original.forEach((item) {
      String brandDeviceName = '${item['Brand']} - ${item['Device']}';
      data[brandDeviceName] = item;
    });
    

    【讨论】:

    • 这是一个聪明的方法!我唯一担心的是我们正在为已经很大的地图创建另一张地图......你认为这是最有效的方式吗?我喜欢。非常感谢!
    • 请注意,您不是在复制数据 - 您只是在添加对它的附加引用。它会正常工作的。
    • 如果有用别忘了采纳答案
    • @RichardHeap 我的问题和这个类似,你能帮忙吗? stackoverflow.com/questions/55507988/…
    猜你喜欢
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2017-07-03
    相关资源
    最近更新 更多