Ricerca di oggetti JSON con JQuery

Ho il seguente object JSON. Usando JQuery ho bisogno di trovare i valori di quanto segue:

summary.nameValues.ID e detail.TypedNameValues.size

Qualcuno potrebbe mostrare come questo può essere ottenuto usando 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 non funziona su letterali di oggetti semplici. Puoi utilizzare la funzione seguente in un modo simile per cercare tutti gli id ​​(o qualsiasi altra proprietà), indipendentemente dalla sua profondità nell’object:

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

Utilizzare in questo modo:

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

Questa risposta è stata presa da un altro thread. Puoi trovare ulteriore aiuto qui: usa find () di jQuery su un object JSON

L’esecuzione di questo tipo di query su strutture JSON è banale con DefiantJS ( http://defiantjs.com ). Questa lib estende l’object globale JSON con il metodo “search” – con il quale è ansible eseguire ricerche espressive XPath.

Dai un’occhiata a questo violino;
http://jsfiddle.net/hbi99/kLE2v/

Il codice può assomigliare a questo:

 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 

Qualcun altro come già risposto, in entrambi i casi ecco la mia versione per lo stesso.

  

parser

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

Un violino funzionante per te sullo stesso.

http://jsfiddle.net/3EVE4/