【问题标题】:Get a JSON Key based off of a user select根据用户选择获取 JSON 密钥
【发布时间】:2016-08-19 08:37:28
【问题描述】:

我目前正在创建一个工具,允许用户输入他们的状态和类别,以查看 3 个价格计划是什么。这 2 个选项(状态/类别)将通过选择字段进行选择,包含这些数字的数据位于 JSON 文件中:

[{ 
    "Alabama/Category1/Price1":"$123,123 ",
    "Alabama/Category1/Price2":"$123,123 ",
    "Alabama/Category1/Price3":"$123,123 ",
    "Alabama/Category2/Price1":"$345,345 ",
    "Alabama/Category2/Price2":"$345,345 ",
    "Alabama/Category2/Price3":"$345,345 ",
    "Alabama/Category3/Price1":"$456,789 ",
    "Alabama/Category3/Price2":"$456,789 ",
    "Alabama/Category3/Price3":"$456,789 ",
    "Alabama/Category4/Price1":"$321,321 ",
    "Alabama/Category4/Price2":"$321,321 ",
    "Alabama/Category4/Price3":"$321,321 ",
    "Alaska/Category1/Price1":"$123,123 ",
    "Alaska/Category1/Price2":"$123,123 ",
    "Alaska/Category1/Price3":"$123,123 ",
    "Alaska/Category2/Price1":"$345,345 ",
    "Alaska/Category2/Price2":"$345,345 ",
    "Alaska/Category2/Price3":"$345,345 ",
    "Alaska/Category3/Price1":"$456,789 ",
    "Alaska/Category3/Price2":"$456,789 ",
    "Alaska/Category3/Price3":"$456,789 ",
    "Alaska/Category4/Price1":"$321,321 ",
    "Alaska/Category4/Price2":"$321,321 ",
    "Alaska/Category4/Price3":"$321,321 ",
}]

基本上在单击按钮时,我想遍历 JSON 文件并根据用户选择获取状态/类别。由于该关键路径中有一些“/”,我尝试将用户选择存储在一个变量中,以便我可以定位每个价格点并将它们显示在页面上。我尝试将其存储在一个变量中,如下所示:

var test = stateSelected + '/' + categorySelected + '/Price1';

但这不起作用,并且想知道是否有任何关于如何实现这一点的其他见解?阅读其他一些材料,似乎有些人建议使用 $.parseJSON,但这也不起作用。为此我使用了:

$.getJSON("json_data.json", function(obj) {
            $.each($.parseJSON(data), function(key, value) {

                //code here
            });
        });

很抱歉,我在这个网站上有太多次没有提供足够的信息让人们能够理解真正的问题,我希望我已经正确地概述了我的问题。对此的任何帮助将不胜感激。谢谢!

编辑:另外,如果您认为除了我在这里的方式之外还有其他方式来呈现 JSON 数据,请告诉我。数据将通过电子表格更新,我使用了 Excel -> JSON 翻译工具,这就是它吐出数据的方式。

【问题讨论】:

  • data 中的$.parseJSON(data) 是什么?为什么你的代码不使用obj
  • 您的 JSON 文件包含一个对象数组。为什么它在一个数组中?如果相同的State/Category/Price 出现在数组的多个项目中怎么办?
  • obj[0][test] 不返回你想要的吗?
  • 你说得对,应该是(obj)。在回复中:“如果数组中的多个项目中有相同的状态/类别/价格怎么办?”,我相信这就是@Tudor 在他的回答中提到的。我提出了另一个问题,试图让 JSON 格式不同,但唯一的问题是我可以使用 Excel -> JSON 工具,这是唯一被吐回给我的数据。

标签: javascript jquery json key each


【解决方案1】:

如果您不能更改 JSON,那么您必须遍历对象中的每个键:

function getPricePoints(state, category, onComplete)
{
    $.getJSON("json_data.json", function(obj)
    {
        var result = {};
        for(key in obj)
        {
            if(obj.hasOwnProperty(key) && key.indexOf(state + "/" + category + "/") == 0)
            {
                result[key] = obj[key];
            }
        }

        onComplete(result);
    });
}

【讨论】:

    【解决方案2】:

    我会按以下方式格式化 JSON:

    var options = {
       Alabama: {
         Category1: {
           Price1: "$123, 123",
           Price2: "$123, 123",
         }
       }
    }
    

    然后:

    var priceOptions = options[stateSelected][categorySelected];
    

    【讨论】:

    • 我同意这将是访问 JSON 的最简单方法。这里唯一的问题是工具 (shancarter.github.io/mr-data-converter) 导出我得到的 Excel 数据的方式是我在上面发布的方式。如果您知道以您提到的方式导出电子表格数据的工具,我很乐意与您分享!最后,现在正在整理数据,因此我可以询问将数据输入电子表格的任何人,以我也询问他们的任何形式将其放入。再次感谢!
    • 您可以创建另一个问题,询问如何将 excel 文件转换为这种 JSON 格式并发布 excel 文件示例并提及 mr-data-converter。
    • 您在上面输入的 JSON 格式在 JSON 验证器中无效。您认为没有任何方法可以使用我原来的 JSON 格式吗?即使这是一个很长的解决方法?
    【解决方案3】:

    如果您可以更改 JSON 的表示方式,那么为什么不这样存储数据:

    var options = {
        "Alabama/Category1" : {
            "Price1":"$123,123 ",
            "Price2":"$123,123 ",
            "Price3":"$123,123 "
        },
        "Alabama/Category2" : {
            "/Price1":"$345,345 ",
            "Price2":"$345,345 ",
            "Price3":"$345,345 "
        }
        ...
    }
    

    然后,您会削减用户的输入并获得该州和类别组合的所有价格选项?

    test = stateSelected + '/' + categorySelected;
    var priceOptions = options[test];
    

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多