Właśnie zaczynam używać biblioteki Jackson JSON. Jackson jest bardzo potężną biblioteką, ale ma niesamowicie rozbudowany interfejs API. Wiele rzeczy można zrobić na wiele sposobów. To sprawia, że trudno znaleźć drogę w Jackson - jak się dowiedzieć, jaki jest właściwy/najlepszy sposób robienia rzeczy?readValue i readTree w Jackson: kiedy użyć?
Dlaczego chciałbym używać tego rozwiązania:
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());
}
}
ciągu takiego rozwiązania:
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());
}
}
Albo nad rozwiązaniami, które natknąłem użyciu JsonFactory i JsonParser a może nawet więcej opcji ...
Wydaje mi się, że mapper.readValue jest najbardziej ogólna i może być używana w wielu przypadkach: czytaj do JsonNode, ObjectNode, ArrayNode, PoJo, itd. Więc dlaczego miałbym chcieć nas e mapper.readTree?
Jaki jest najlepszy sposób na konwersję JsonNode do ObjectNode? Wystarczy rzucić na ObjectNode? Lub użyć czegoś takiego jak mapper.convertValue?
dzięki, to przydatne informacje. Zakładałem, że convertValue jest na tyle sprytny, że można go rzucać do właściwego typu, o ile to możliwe, i że będzie bezpieczniejsze niż sam casting ... –
To ciekawy pomysł - może taki kod mógł zostać dodany? Nazwa "konwertuj" ma na celu przekazanie konwersji; nie po prostu rzucać, ale myślę, że to nie jest nierozsądne oczekiwanie. Złożę dla tego problem ulepszenia. – StaxMan