2016-10-21 15 views
0

Я использую Jackson Json Parser для получения значений из строки JSON и последующего подключения их к Java-объекту. Вот кусок из рода JSON Я имею дело с:Jackson JsonParser get Array token

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

Вот что я собираюсь в моем Java коде. net является глобальным ArrayList, объекты страницы имеют поле String address и поле String []. Я хочу получить массив строк String из JSON и подключить их к объекту 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); 
    } 
} 

я предпочел бы придерживаться nexting метода JsonParser я использую, если это не просто хочу быть слишком громоздким.

+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

Я переключил некоторые вещи в другом месте моей программы, и это все закончилось для меня. –