jquery每个迭代复杂的JSON结构与“where子句”

时间:2014-04-09 21:50:54

标签: javascript jquery json each

我并非100%清楚如何制定$.each()功能。

以下JSON数据块包含数组ItemValues中的多个项目。我正在寻找的是一种方法(因为这个数据包可以任意大)有点得到每个ItemValue数组项WHERE Fields.Id相当于某个值" x&#34 ;。

同样,是否有一些方法可以将ItemValues[n].Fields.units作为数组进行检索?

JSON:

{
   "CacheName":"Default",
       "LastUpdateTime":"\/Date(1396994130568)\/",
       "Type":"Start",
       "TotalItemsCount":3,
       "PassingFilterCount":3,
       "ItemValues":[
      {
         "Fields":{
            "id":"13288263",
            "status":"8",
            "x_cord":"7250600",
            "y_cord":"566620200",
            "code":"1021",
            "sub_code":"1W",
            "priority":"1",
            "units":"1011, 1130, 1201, 1233, 1445, 1501, 1518, 1714, 1726, 1823, 1825, 1832, 3662",
            "ts":"20140402234025UT"
         },
         "Id":"13288263",
         "LastAction":"add"
      },
      {
         "Fields":{
            "id":"13288264",
            "status":"8",
            "x_cord":"",
            "y_cord":"",
            "code":"",
            "sub_code":"",
            "priority":"-1",
            "units":"",
            "ts":""
         },
         "Id":"13288264",
         "LastAction":"add"
      },
      {
         "Fields":{
            "id":"13288265",
            "status":"8",
            "x_cord":"",
            "y_cord":"",
            "code":"",
            "sub_code":"",
            "priority":"-1",
            "units":"",
            "ts":""
         },
         "Id":"13288265",
         "LastAction":"add"
      }
    ]
}

2 个答案:

答案 0 :(得分:1)

假设您显示的json是变量json,那么对于这个确切的场景,您可以使用:

function validItems(id,json){
 var validItemValues = [];
 var values = json.ItemValues;
 for(var value in values){
  if( !values.hasOwnProperty(value) )continue;
  var itemValue = values[value];
  if( itemValue.Fields.id == id ){
   validItemValues.push(itemValue);
  }
 }
 return validItemValues;
}

使用jQuery' .each

的同样方法
function validItems(id,json){
 var validItemValues = [];
 $.each(json.ItemValues,function(){
  if(this.Fields.id == id)validItemValues.push(this);
 });
 return validItemValues;
}

有关查找json值的递归方法,请参阅以下答案:https://stackoverflow.com/a/11657379/1026459

获得有效项后,可以迭代它们,然后使用split将单位字符串转换为数组。

var validItemList = validItems(id,json);
for( var item in validItemList ){
 if( !validItemList .hasOwnProperty(item ) )continue;
 var currentItem = validItemList[item];
 var fieldsUnitArray = currentItem.Fields.units.split(" ");
 //work with array of units
}

答案 1 :(得分:1)

以下是使用JSON.parse()String.split()

显示所有内容的代码(根据需要使用$.each()
var json_string = "Your JSON here";

//Use JSON.parse to make it an object
var json_object = JSON.parse(json_string.innerHTML);

//Will store the matched identifier
var matched_id;

//Will store the matched array
var matched_array;

//A valid test case, with units not null
var x = 13288263; 
$.each(json_object.ItemValues, function(key, item_value){
    if(item_value.Fields.id == x){
        matched_id = item_value.Fields.id;

        //Second part of the question
        var units = item_value.Fields.units;
        if(units != ""){
            //String.split() returns an array, by splitting the string with 
            //selected string
            matched_array = units.split(', ');
        }
    }
});

Here's a demo,玩它。

注意:肯定有一些更好的解决方案。