2016-10-21 64 views
0

我正在使用Jackson Json解析器從JSON字符串中獲取值,然後將它們插入到Java對象中。這裏是我正在處理的那種JSON塊:Jackson JsonParser獲取Array令牌

{ 
    "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

我在我的程序中的其他地方切換了一些東西,這確實最終爲我工作。 –