2014-02-18 70 views
1

的杰克逊JSON数组列表我有一个JSON字符串是这样的:未知领域

{ 
    "123": { 
     "hi": { 
      "name": "John", 
      "phone": "12345" 
     } 
    }, 
    "124": { 
     "hi": { 
      "name": "James", 
      "phone": "12345" 
     } 
    }, 
    "125": { 
     "hi": { 
      "name": "Leo", 
      "phone": "12347" 
     } 
    } 
} 

的JSON外部命令:123, 124, 125我只是想获得最后一个字段(“125”的值:{。 ..})但我不知道它的名字,是自动生成的。最好的方法是什么?

我试图映射到的arrayList,但我找不到正确的方法。

+0

恐怕它的名字是 “125”,这是不是一个数组 –

+0

什么确切性质字段名称(“123”等)有?你的问题是,这是一个JSON对象的字段没有排序。所以,除非你的姓名上加了一些命令(例如按字典顺序),否则就没有必要谈论最后一个字段。 –

+0

嗨菲利普。 Json按照我写的123,124,125,......的方式进行外部命令......我只想得到最后一个字段。 –

回答

0

我做到了将JSON字符串放入JsonNode,数据和映射到NavigableMap。

NavigableMap<String, JsonNode> updates = mapper.readValue(data.traverse(), new TypeReference<TreeMap<String, JsonNode>>() {}); 
Entry<String, JsonNode> lastEntry = updates.lastEntry(); 
String lastUpdate = lastEntry.getValue().toString(); 
1

您也可以使用@JsonAnySetter注释。请看下面的例子。 POJO类:

class Node { 

    private Integer key = Integer.MIN_VALUE; 
    private JsonNode value; 

    @JsonAnySetter 
    public void set(String newKey, JsonNode newValue) { 
     if (Integer.valueOf(newKey) > key) { 
      value = newValue; 
     } 
    } 

    public JsonNode getValue() { 
     return value; 
    } 

    @Override 
    public String toString() { 
     return String.valueOf(value); 
    } 
} 

用法示例:

ObjectMapper mapper = new ObjectMapper(); 
Node node = mapper.readValue(json), Node.class); 
System.out.println(node); 

打印:

{"hi":{"name":"Leo","phone":"12347"}}