Sadece Jackson JSON kütüphanesini kullanmaya başladım. Jackson çok güçlü bir kütüphanedir, ancak oldukça kapsamlı bir API'ye sahiptir. Birçok şekilde birçok şey yapılabilir. Bu, Jackson'da yolunuzu bulmayı zorlaştırıyor - işlerin doğru/en iyi yolunun ne olduğunu nasıl bilebiliriz? Böyle bir çözelti içindereadValue and readTree in Jackson: ne zaman kullanılmalı?
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());
}
}
:
Neden bu çözüm kullanırsınız
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());
}
}
Ya çözümleri üzerinde
Ben JsonFactory ve JsonParser ve belki de daha fazla seçenekleri kullanarak rastladı ...Bu mapper.readValue en genel olduğunu ve birçok durumda kullanılabilir: çünkü JsonNode, ObjectNode, ArrayNode, PoJo, vb okuyun. Neden bize istiyorum e mapper.readTree?
JsonNode'u bir ObjectNode'a dönüştürmenin en iyi yolu nedir? Sadece ObjectNode için döküm? Ya da mapper.convertValue gibi bir şey kullanın?
teşekkürler, bu yararlı bir bilgidir. ConvertValue'nin mümkün olduğunda doğru tipte yayınlamak için yeterince akıllı olduğunu ve kendiminkinden daha güvenli olacağını düşündüm ... –
Bu ilginç bir fikir - belki de böyle bir kod eklenebilir? 'Convert' ismi, dönüştürmeyi ifade etmek içindir; sadece döküm değil, ama sanırım mantıksız bir beklenti değil. Bunun için bir iyileştirme sorunu kaydedeceğim. – StaxMan