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.