我剛開始使用Jackson JSON庫。傑克遜是一個非常強大的圖書館,但它擁有非常廣泛的API。很多事情可以通過多種方式完成。這使得很難在傑克遜找到自己的方式 - 如何知道做什麼是正確的/最好的做法?傑克遜readValue和readTree:何時使用哪個?
爲什麼要使用此解決方案:
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等。爲什麼我要我們e mapper.readTree?
什麼是將JsonNode轉換爲ObjectNode的最佳方式?只需投射到ObjectNode?或者使用類似mapper.convertValue的東西?
謝謝,這是有用的信息。我認爲convertValue足夠聰明,只要可能就投射到正確的類型,並且比投射自己更安全...... – 2012-04-16 08:13:45
這是一個有趣的想法 - 也許這樣的代碼可以添加?名稱「轉換」是爲了表達轉換;不是簡單地演員,但我想這不是不合理的期望。我將爲此提出改進問題。 – StaxMan 2012-04-17 18:32:12