使用JQuery搜索JSON对象

我有以下JSON对象。 使用JQuery我需要找到以下值:

summary.nameValues.ID和detail.TypedNameValues.size

有人可以说明如何使用JQuery实现这一目标?

[ { "path": "\\Users\\john.smith\\test", "summary": { "NameValues": [ { "Name": "Id", "Values": [ "232639" ] }, { "Name": "City", "Values": [ "London" ] } ] }, "detail": { "String": "some data", "Result": 0, "TypedNameValues": [ { "Name": "name1", "Type": "string", "Value": "data here!!" }, { "Name": "size", "Type": "long", "Value": "434353" } ] } } ] 

jQuery不适用于普通对象文字。 您可以使用以下函数以类似的方式搜索所有’id’(或任何其他属性),无论其在对象中的深度如何:

 function getObjects(obj, key, val) { var objects = []; for (var i in obj) { if (!obj.hasOwnProperty(i)) continue; if (typeof obj[i] == 'object') { objects = objects.concat(getObjects(obj[i], key, val)); } else if (i == key && obj[key] == val) { objects.push(obj); } } return objects; } 

使用如下:

 getObjects(TestObj, 'id', 'A'); // Returns an array of matching objects 

这个答案取自另一个主题。 您可以在这里找到更多帮助: 在JSON对象上使用jQuery的find()

使用DefiantJS( http://defiantjs.com )在JSON结构上执行此类查询是微不足道的。 此lib使用“搜索”方法扩展全局对象JSON – 使用该方法可以执行XPath表达式搜索。

看看这个小提琴;
http://jsfiddle.net/hbi99/kLE2v/

代码可能如下所示:

 var data = [ { "path": "\\Users\\john.smith\\test", "summary": { "NameValues": [ { "Name": "Id", "Values": "232639" }, { "Name": "City", "Values": "London" } ] }, "detail": { "String": "some data", "Result": 0, "TypedNameValues": [ { "Name": "name1", "Type": "string", "Value": "data here!!" }, { "Name": "size", "Type": "long", "Value": "434353" } ] } } ], res = JSON.search( data, '//*[Name="size"]' ); console.log( res[0].Value ); // 434353 

其他人已经回答了,这里的任何一种方式都是我的版本。

  

分析器

 var obj = $.parseJSON($('#ta').val()); var nameValues = obj[0].summary.NameValues; var typedNameValues = obj[0].detail.TypedNameValues; function getObjByName(o, name) { for (var i = 0; i < o.length; i++) { if (o[i].Name == name) { return o[i]; } } return null; } alert(getObjByName(nameValues, 'Id').Values.join(", ")); alert(getObjByName(typedNameValues, 'size').Value); 

同样适合你的工作小提琴。

http://jsfiddle.net/3EVE4/