根据用户选择获取 JSON 密钥

Get a JSON Key based off of a user select

本文关键字:JSON 密钥 获取 选择 用户      更新时间:2023-09-26

我目前正在创建一个工具,允许用户输入他们的状态和类别,以查看 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 转换器工具,这就是它吐出数据的方式。

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

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

然后:

var priceOptions = options[stateSelected][categorySelected];

如果您无法更改 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);
    });
}

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