根据用户选择获取JSON密钥

时间:2016-04-25 19:21:44

标签: javascript jquery json key each

我目前正在创建一个工具,允许用户输入他们的州和类别,以查看3个价格计划是什么。这两个选项(状态/类别)将通过选择字段选取,包含这些数字的数据位于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翻译工具,这就是它吐出数据的方式。

3 个答案:

答案 0 :(得分:1)

我按以下方式格式化JSON:

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

然后:

var priceOptions = options[stateSelected][categorySelected];

答案 1 :(得分:0)

如果您无法更改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 :(得分:-1)

如果您可以改变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];