2016-10-21 4 views
0

Jackson Json Parser를 사용하여 JSON 문자열에서 값을 가져온 다음 Java Object에 연결합니다. 다음은 내가 다루고있는 JSON 종류의 덩어리입니다.Jackson JsonParser 배열 토큰 가져 오기

{ 
    "address":"aURL", 
    "links":[ 
     "aURL", 
     "aURL", 
     "aURL" 
    ] 
} 

다음은 Java 코드에서 수행 한 작업입니다. net은 전역 ArrayList이며 Page 객체에는 String 주소 필드와 String [] 링크 필드가 있습니다. JSON에서 링크의 String 배열을 가져와 Page 객체에 연결하려고합니다. getText() 메서드로 주소 문자열을 쉽게 추출 할 수는 있지만 String 배열을 잡는 편리한 방법을 생각할 수는 없습니다. 여기 내 코드는 바로 지금입니다 : 그냥 거 너무 다루기 힘든 일하지 않는 이상

private static void parse(String json) throws IOException { 
    JsonParser parser = new JsonFactory().createJsonParser(json); 
    while (parser.nextToken() != JsonToken.END_OBJECT) { 
     String tok = parser.getCurrentName(); 
     Page p = new Page(); 
     if ("address".equals(tok)) { 
      parser.nextToken(); 
      p.setAddress(parser.getText()); 
     } 
     if ("links".equals(tok)) { 
      parser.nextToken(); 
      //p.setLinks(HOW TO GET STRING ARRAY) 
     } 
     net.add(p); 
    } 
} 

내가, 내가 사용하고있는 JsonParser nexting 방법을 고수하는 것을 선호합니다.

+0

Gson과 같은 훨씬 간단한 것을 사용하지 않은 특별한 이유는 무엇입니까? – IamNguele

답변

1

다음과 같이 시도해 볼 수 있습니다.

private static void parse(String json) throws IOException { 
    ObjectMapper objectMapper = new ObjectMapper(); 
    JsonParser parser = new JsonFactory().createJsonParser(json); 
    while (parser.nextToken() != JsonToken.END_OBJECT) { 
     String tok = parser.getCurrentName(); 
     Page p = new Page(); 
     if ("address".equals(tok)) { 
      parser.nextToken(); 
      p.setAddress(parser.getText()); 
     } 
     if ("links".equals(tok)) { 
      parser.nextToken(); 
      ArrayNode node = objectMapper.readTree(parser); 
      Iterator<JsonNode> iterator = node.elements(); 
      String[] array = new String[node.size()]; 
      for (int i = 0; i < node.size(); i++) { 
       if (iterator.hasNext()) { 
        array[i] = iterator.next().asText(); 
       } 
      } 
      p.setLinks(array); 
     } 
     net.add(p); 
    } 
} 
+0

String [] 링크가 계속 올라오고 있습니다. –

+0

방금 ​​다시 확인했습니다. 그것은 나를 위해 잘 작동합니다. 다시 확인하십시오. – Veeram

+0

내 프로그램에서 다른 곳으로 전환했는데 이것이 결국 해결되었습니다. –