2014-09-11 3 views
0

JSON 객체를 체크인하는 방법은 입력 경로가 있는지 여부입니다.객체 내부에서 JSON 경로 찾기

var obj = { 
    "schemaOne": { 
    "name": "abc", 
    "Path": "i.abc", 
    "count": 5347, 
    "subFolders": [ 

    ] 
    }, 
    "schemaTwo": { 
    "name": "cde", 
    "Path": "i.cde", 
    "count": 0, 
    "subFolders": [ 
     { 
     "name": "efg", 
     "Path": "", 
     "count": 0, 
     "subFolders": [ 

     ] 
     }, 
     { 
     "name": "hij", 
     "Path": "i.hij", 
     "count": 1, 
     "subFolders": [ 

     ] 
     } 
    ] 
    } 
} 

var inputpath = "obj.count"; 

몇 가지 조사를 한 후에 나는 아래의 코드를 발견했습니다. 이 코드에서 o.Path은 사용자에게 알려져 있습니다. 하지만 코드를 수정하여 동적으로 obj.count이 JSON 객체에 있는지 여부를 확인하고 싶습니다.

function upd(o, path, count) { 
    if (o.Path == path) { 
    o.count = count; 
    } else { 
    var arr; 
    if (Array.isArray(o)) arr = o; 
    else if (o.subFolders) arr = o.subFolders; 
    else return; 
    for(var j=0; j < arr.length; j++) { 
     upd(arr[j], path, count); 
    } 
    } 
} 
+2

JSON은 어디에 있나요? – Teemu

+0

@Teemu obj 변수에는 JSON 객체 – user87267867

+3

이 들어 있습니다. 아니요, 'obj'는 JavaScript 객체이므로 데이터 교환 형식과 아무 관련이 없습니다. – Teemu

답변

0

귀하의 질문은 명확하지 않으며 유스 케이스도 아닙니다. 누군가가 말했듯이 obj은 JSON이 아닌 JavaScript 객체입니다.

정확하게 이해했다면 문자열 (예 : "obj.count")이 해당 개체에 있음을 나타내는 경로가 있는지 확인하고 싶습니다. (eval 악하고 모든 경우에 거의 피해야한다)

매우 빠르지 만 안전하지 솔루션이 될 수 :

대안
if(eval(inputpath)){ 
    //... do something 
} 

, 당신이있는 개체를 가져옵니다 함수를 작성하는 것이 좋습니다 및 문자열 (경로)을 매개 변수로 사용하여 문자열 경로를 구문 분석하고 해당 경로가 객체에 포함되어 있는지 확인합니다.

여기에서 시작 : Accessing nested JavaScript objects with string key

+0

코드를 사용해 보았지만 알 수없는 배열 인덱스에 대해서는 정의되지 않음 [http://jsfiddle.net/user87267867/uLL0a9u0/] – user87267867

+0

인덱스가 알 수없는 경우 올바른 경로가 아니므로 잘 수 없습니다. 그걸 써. 귀하의 예제에서'schemaTwo.subFolders [0] .name'을 대신 사용하십시오 –

+0

예 – user87267867