readValue и readTree в Джексоне :когда что использовать?

Я только начинаю использовать JSON-библиотеку Джексона. Jackson — очень мощная библиотека, но у нее очень обширный API. Многое можно сделать несколькими способами. Это затрудняет поиск своего пути в Джексоне -, как узнать, как правильно/лучше всего поступать?

Зачем мне использовать это решение?:

String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readValue(json, JsonNode.class);
if (node.isObject()) {
    ObjectNode obj = mapper.convertValue(node, ObjectNode.class);
    if (obj.has("a")) {
        System.out.println("a=" + obj.get("a").asDouble());
    }
}

По сравнению с решением, подобным этому:

String json = "{\"a\":2, \"b\":\"a string\", \"c\": [6.7, 6, 5.6, 8.0]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(json);
if (node.isObject()) {
    ObjectNode obj = (ObjectNode) node;
    if (obj.has("a")) {
        System.out.println("a=" + obj.get("a").asDouble());
    }
}     

Или по решениям, с которыми я столкнулся, используя JsonFactory и JsonParser и, возможно, даже больше вариантов...

Мне кажется, что mapper.readValue является наиболее универсальным и может использоваться во многих случаях :для чтения в JsonNode, ObjectNode, ArrayNode, PoJo и т. д. Так зачем мне использовать mapper.readTree?

И как лучше всего преобразовать JsonNode в ObjectNode? Просто привести к ObjectNode? Или использовать что-то вроде mapper.convertValue?

21
задан Jos de Jong 11 April 2012 в 20:33
поделиться