2017-11-15 5 views
1

이 구조를 반복하는 데 문제가 있습니다. Jackson을 사용하는 몇 가지 방법이 있으며 누군가가 신속하고 관리하기 쉬운 솔루션을 제공 할 수 있기를 바랍니다.Jackson을 사용하여 여러 자식 노드 반복

JSON 구조는 전체적으로 일관되며 모든 하위 요소는 크기에 관계없이 "하위"필드를 갖습니다.

각 노드에 대해 field1, field 2 및 field3을 출력하고 싶습니다. 노드의 계층 구조는 부적합합니다.

JsonFactory factory = new JsonFactory(); 
JsonParser parser = factory.createParser(json); 

while (parser.nextToken() != null) { 
    String name = parser.getCurrentName(); 
    if ("field1".equals(name)) { 
     parser.nextToken();     // Advance to the field value 
     String value = parser.getText(); // Get the field value as a string 
     System.out.println(value); 
    } 
} 
parser.close(); 

보통 스트리밍 API를 사용하는 것이 더 많은 작업이 필요하지만 (계층 구조가 중요하지 않기 때문에)이 경우에는 적절한 것 같다

{ 
    "field1": "example data", 
    "field2": "example data2", 
    "field3": "example data3", 
    "children": [{ 
     "field1": "example data", 
     "field2": "example data2", 
     "field3": "example data3", 
     "children": [{ 
       "field1": "example data", 
       "field2": "example data2", 
       "field3": "example data3", 
       "children": [] 
      }, 
      { 
       "field1": "example data", 
       "field2": "example data2", 
       "field3": "example data3", 
       "children": [] 
      } 
     ] 
    }, { 
     "field1": "example data", 
     "field2": "example data2", 
     "field3": "example data3", 
     "children": [{ 
      "field1": "example data", 
      "field2": "example data2", 
      "field3": "example data3", 
      "children": [] 
     }] 
    }] 
} 
+0

계층 구조는 여기에 관계가 없습니다. 구조 내의 3 가지 값의 간단한 출력만으로도 필요한 것입니다. OP를 업데이트하여 이러한 요구 사항을 반영합니다. – user0000001

답변

2

스트리밍 API는 간단한 솔루션을 제공합니다.

+0

스트리밍 API를 사용하면 어떤 이점이 있습니까? 메모리와 CPU면에서 더 효율적입니까? – user0000001

+1

스트리밍의 이점은 XML의 SAX 구문 분석이 DOM 구문 분석을 통해 제공하는 것과 동일한 이점입니다. 날짜를 메모리에 사용되지 않는 오브젝트로 표시하는 오버 헤드가 발생하지 않습니다. 원하는 지점으로 만 처리하고 구문 분석 루프를 종료하면 더 빠를 수 있습니다. – DwB