2016-10-21 41 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

我在我的程序中的其他地方切换了一些东西,这确实最终为我工作。 –