杰克逊杰森的未知领域的arraylist

时间:2014-02-18 07:38:30

标签: java json jackson

我有一个像这样的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 JsonNodes,但我找不到正确的方法。

2 个答案:

答案 0 :(得分: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"}}

答案 1 :(得分: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();