2013-06-10 7 views
1

다음 JSON 객체가 있습니다. 사람이이 jQuery를 사용하여 달성 할 수있는 방법을 보여 주 시겠어요JQuery를 사용하여 JSON 객체 검색

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" 
      } 
     ] 
    } 
} 
] 
+0

난이 중복 질문이라고 생각 : http://stackoverflow.com/questions/4992383/use-jquerys-find-on-json- 객체 –

+0

장기적으로 도움이 될 답변을 읽어보십시오. http://stackoverflow.com/a/11922384/1385672 –

답변

1

jQuery는 일반 개체 리터럴에서 작동하지 않습니다.

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 

이를 당신에 관계없이 객체의 깊이의 모든 '아이디의 (또는 다른 속성) 검색과 유사한 방식으로 아래의 기능을 사용할 수 있습니다 대답은 다른 스레드에서 가져온 것입니다. 여기에서 더 많은 도움을 얻을 수 있습니다 : use jQuery's find() on JSON object

0

이미 답변을 드린 다른 사람이 여기 있습니다.

<textarea id="ta" style="display:none;">[ 
{ 
    "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" 
      } 
     ] 
    } 
} 
]</textarea> 

파서

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

같은에서 당신을 위해 작업 바이올린. JSON 구조에 대한 쿼리의이 종류를 수행

http://jsfiddle.net/3EVE4/

1

사소한 사용 DefiantJS (http://defiantjs.com)입니다. 이 lib는 XPath 표현 검색을 실행할 수있는 "search"메소드로 전역 객체 JSON을 확장합니다.

이 피들을 확인하십시오.
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 
관련 문제