我并非100%清楚如何制定$.each()
功能。
以下JSON数据块包含数组ItemValues
中的多个项目。我正在寻找的是一种方法(因为这个数据包可以任意大)有点得到每个ItemValue
数组项WHERE Fields.Id
相当于某个值" x&#34 ;。
同样,是否有一些方法可以将ItemValues[n].Fields.units
作为数组进行检索?
{
"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"
}
]
}
答案 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,玩它。
注意:肯定有一些更好的解决方案。