2016-08-02 2 views
1

여러 부모 자식이있는 중첩 JSON의 일부 특정 데이터를 필터링하려고합니다. 여기 내 JSON, 여기에서하려고 무엇 다수의 부모 자식이있는 Nested Json의 특정 데이터 가져 오기

[{ 
 
    "id": "111111", 
 
    "name": "Parent", 
 
    "steps": [{ 
 
    "id": "22222", 
 
    "name": "Child", 
 
    "steps": [{ 
 
     "id": "333333", 
 
     "name": "Child -Child", 
 
     "steps": [{ 
 
     "id": "444444", 
 
     "name": "Child - Child - Child", 
 
     "steps": [{ 
 
      "id": "5555", 
 
      "name": "Child - Child - Child - Child" 
 
     }, { 
 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
 
      "name": "Child - Child - Child - Child 2" 
 
     }], 
 

 
     }], 
 

 
    }], 
 

 
    }], 
 
}]
내가이 중첩 된 JSON 내부에 일부 특정 데이터의를 얻을 수있을 것입니다이다. 예 : ["parent","Child","Child-Child"...etc ]과 같은 출력이 필요합니다. 그래서 자바 스크립트를 사용하여지도 함수를 사용했지만 출력이 ["ParentChildChildChild"] (공백없이)과 같았습니다. 출력이 문자열 인 경우에만 "\ n"을 넣고 분리 할 수 ​​있지만 때로는 숫자에 있기 때문에 문제가 발생합니다. 여기

var myReturnedValues = mainSteps.map(x => [ 
 
    x.steps.map(y => y.name + 
 
    y.steps.map(z => z.name + 
 
     z.steps.map(a => a.name + a.steps.map(b => b.name)) 
 
    ) 
 
) 
 
]);

누군가의 도움이/나를 명확히 할 수 내가 시도 내 코드입니다.

+0

! 내 질문을 편집하고 내 문제를 설명으로 업데이트 할 수 있습니까? –

답변

2

가장 효과적으로 이것을 수행하려면 다음을 수행해야합니다. 가장 효과적으로 수행하려면 필요합니다. 가장 효과적으로 수행하려면 재귀 사용 재귀 사용 재귀를 사용해야합니다.

이 패턴을 사용하면 중첩 된 오브젝트의 레벨 수에 상관없이 배열이 항상 채워집니다. 이 시도 :

var data = [{ 
 
    "id": "111111", 
 
    "name": "Parent", 
 
    "steps": [{ 
 
    "id": "22222", 
 
    "name": "Child", 
 
    "steps": [{ 
 
     "id": "333333", 
 
     "name": "Child -Child", 
 
     "steps": [{ 
 
     "id": "444444", 
 
     "name": "Child - Child - Child", 
 
     "steps": [{ 
 
      "id": "5555", 
 
      "name": "Child - Child - Child - Child" 
 
     }, { 
 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
 
      "name": "Child - Child - Child - Child 2" 
 
     }], 
 

 
     }], 
 

 
    }], 
 

 
    }], 
 
}] 
 

 
var names = []; 
 
function getNames(arr) { 
 
    for (var i = 0; i < arr.length; i++) { 
 
     names.push(arr[i].name); 
 
     if (arr[i].steps && arr[i].steps.length) 
 
      getNames(arr[i].steps); 
 
    } 
 
} 
 

 
getNames(data); 
 

 
console.log(names);

+0

좋은 사람 :)) – madalinivascu

+0

@Rory McCrossan에 나를 위해 작동하지만 하나의 새로운 문제가 arised mam..It 감사 기능을 평평하게 할 수 –

+0

물론, 별도의 문제인 경우 완전히 새로운 질문을 시작하는 것이 좋습니다. –

1

당신은 자바 스크립트지도 기능을 & 재귀

var jsonArray = [{ 
    "id": "111111", 
    "name": "Parent", 
    "steps": [{ 
    "id": "22222", 
    "name": "Child", 
    "steps": [{ 
     "id": "333333", 
     "name": "Child -Child", 
     "steps": [{ 
     "id": "444444", 
     "name": "Child - Child - Child", 
     "steps": [{ 
      "id": "5555", 
      "name": "Child - Child - Child - Child" 
     }, { 
      "id": "522e9327-0747-4080-b6e2-d57e726b5b26", 
      "name": "Child - Child - Child - Child 2" 
     }], 

     }], 

    }], 

    }], 
}] 

var namesArray = []; 
var recur = function(obj) { 
    namesArray.push(obj.name); 
    if(obj.steps) { 
    obj.steps.map(recur); 
    } 
} 

jsonArray.map(recur); 
console.log(namesArray); 
+0

감사합니다.이 사람도 저에게 효과적입니다. –

1

를 사용하여이를 얻을 수 있습니다 또한 시도 할 수

function getObjectKeyValues(obj, objKey) { 
    var result = []; 
    JSON.stringify(obj, function(key, value) { 
     if (key === objKey) { 
      result.push(value) 
     } 
     return; 
    }); 
    return result; 
} 

확인 :

MDN JSON.stringify()

당신이 밑줄 사용, 반복적으로