2014-07-11 2 views
-1

좋아 값을 얻을 : 나는 주식이 40 인 경우 이름을 좀하고 싶습니다 그래서JSON이 경우 다른 값

{ 
    "wares":[ 
     { 
     "id":"1", 
     "name":"apples", 
     "stock":"40", 
     }, 
     { 
     "id":"2", 
     "name":"pears", 
     "stock":"40", 
     }, 
     { 
     "id":"3", 
     "name":"bananas", 
     "stock":"30", 
     } 
    ] 
} 

이 나는대로이 코드를 사용했습니다 내가 여기 예 : 작동하지만 꽤 주식은 당신이 여분의 값을 넣어 생각 (40)

인 경우 이름을 반환하는 방법을 발견하지 않은 http://techslides.com/how-to-parse-and-search-json-in-javascript/

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 key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not) 
     if (i == key && obj[i] == val || i == key && val == '') { // 
      objects.push(obj); 
     } else if (obj[i] == val && key == ''){ 
      //only add if the object is not already in the array 
      if (objects.lastIndexOf(obj) == -1){ 
       objects.push(obj); 
      } 
     } 
    } 
    return objects; 
} 

함수 calle d 반환 할 내용을 ret (return)합니다.

alert(JSON.stringify(getObjects(JSON, 'stock', '40', 'name'))); 

감사합니다.

답변

1

대체 솔루션 : 위의 호출에, 우리는 항목이 아니라 루트 개체를 포함하는 배열을 전달해야한다는

function getObjects(_object, _key, _value, _return) { 
    return _object.filter(function(_item) { 
    return _item[_key] == _value; 
    }).map(function(_item) { 
    return _item[_return]; 
    }); 
} 

참고. 아니면 루트 개체

에게 동의 위를 수정할 수 있습니다 그리고 당신은 그것을 좋아 전화 :

getObjects(obj.wares, 'stock', 40, 'name'); 

내가 그것을 될 것이라고 예상보다 훨씬 더 간단 그 뒤로 ["apples", "pears"]

+0

이것은 정말 유용한 방법이며 jquery를 사용하지 않습니다. 이것은 또한 몇 가지가 아니라 하나의 아름다운 선으로 모든 제품을 반환합니다. 두 가지 방법 모두 정말 좋으며 모두 기본 설정으로 내려갑니다. 나는 techfoobar 너무 감사드립니다! – user2524703

0

시험해보십시오!

$.each(getObjects(JSON, "stock", "40"), function() { 
    alert(this.name); 
}) 

편집 : 그냥 내가 쓴 무엇인지 설명하기 위해,있는 getObjects 기능은 그럼 제가 한 것은

을 반환하는 모든 JSONS의 각 이름을 얻을 수 있었다 검색 기준과 일치하는 모든 개체를 반환 기본 filter()map() 방법을 사용하여
+0

을 받으실 수 있습니다! 놀랍도록 간단하고 신속하며 아름답게 일했습니다. 감사! – user2524703

관련 문제