2016-04-25 69 views
2

我目前正在创建一个工具,允许用户将他们的状态和类别放在一起,看看3个价格计划是什么。这两个选择(州/类)将通过选择现场采摘,以及包含这些数字的数据是一个JSON文件:获取基于用户选择的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翻译工具,这是它将数据吐出的方式。

+0

什么是'$ .parseJSON(data)'中的'data'?为什么你的代码不使用'obj'? – Barmar

+0

您的JSON文件包含一个对象数组。它为什么在一个数组中?如果相同的“州/类别/价格”在数组中有多个项目会怎样? – Barmar

+0

不'obj [0] [测试]'返回你想要的? – Barmar

回答

-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]; 
1

我格式化JSON以下列方式:

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

然后:

var priceOptions = options[stateSelected][categorySelected]; 
+1

我同意这将是访问JSON的最简单方法。这里唯一的问题是,工具(https://shancarter.github.io/mr-data-converter/)导出我得到的Excel数据的方式是我在上面发布的方式。如果您知道以您提及的方式导出电子表格数据的工具,我很乐意为您分享!最后,数据现在被放在一起,所以我可以问谁输入数据到电子表格,以我想问的方式放入它。再次感谢! –

+0

您可以创建另一个问题,在其中询问如何将excel文件转换为这种JSON格式,并发布excel文件的示例并提及mr-data-converter。 –

+0

上面提到的JSON格式在JSON验证器中出现无效。你不认为我有任何使用我原来的JSON格式的方式?即使这是一个很长的解决方法? –

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); 
    }); 
}