2016-08-11 3 views
0

JsonNode 트리를 통해 반복을 시도하고 루트 노드의 자식 노드를 반복하고 텍스트를 가져 오는 다음 코드 단편을 작성했습니다.이 필드는 필드 이름으로 간주됩니다.Jackson에서 루트 노드의 모든 자식이 필드 이름이라고 가정하는 것이 합리적입니까?

JsonNode rootNode = new ObjectMapper().readTree(jsonParser); 
for (JsonNode node : rootNode){ 
    String fieldName = node.asText(); // <- is it safe to assume this? 
    JsonNode value = node.get(fieldName); 
} 

나는 this similar post을 읽고,하지만 허용 대답은 단순히 작동하지 않습니다 단지 자체 as far as I know하여 foreach 루프를 통해 반복 할 수없는 두 fieldsfieldNames 반환 iterator 때문에.

위의 스 니펫의 가정이 여전히 유효한지 다른 질문이 있습니다.

+0

JsonNode # iterator()에는 javadoc에 대한 링크가있는 keys_가 포함되어 있지 않으므로 자세한 내용을 보려면 _Since를 참조하십시오. –

+0

foreach 문에 대해 혼란 스러우면 [here 's] (http://stackoverflow.com/questions/85190/how-does-the-java-for-each-loop-work)와 관련하여 ' iterator()'. –

답변

1

"피 각" 루프 편리 성이 JSON 어레이 구조의 요소를 반복 사용할 수 있도록 구현 elements(); 전화 등 JsonNode#iterator() 상태

동일의 자바 독.

그리고 JsonNode#elements()의 javadoc는이 노드 IFF에,이 노드의 모든 값 노드에 액세스하기위한

방법 상태는 JSON 배열 또는 객체 노드입니다. 개체 노드의 경우 필드 이름 (키) 은 값에 포함되지 않습니다. 다른 노드 유형의 경우 빈 반복자를 반환합니다.

따라서 반환되는 요소는 객체 노드의 각 키 - 값 쌍의 값입니다. 배열 노드의 경우 배열 요소입니다.

+0

그게 부끄러운 일입니다. 코드 스 니펫이 얼마나 깨끗한 지 정말 좋아했습니다. 또한 Java에 대한 중요한 정보가 누락 된 것 같습니다. 'iterator'가'for' 루프를 통해 반복 될 수 없다면 왜 원래 응답이 받아 들여 졌습니까? –

+0

@THISUSERNEEDSHELP 나는 그 마지막 질문을 이해하지 못한다. 타입이'Iterable'을 구현하면, foreach 문에서 그 타입의 값을 사용할 수 있습니다. –

+0

@THISUSERNEEDSHELP 또한, 이미 답변에 이미 내 대답이 포함되어 있음을 알았습니다. –