Sto appena iniziando ad usare la libreria Jackson JSON. Jackson è una libreria molto potente, ma ha un'API terribilmente estesa. Molte cose possono essere fatte in molti modi. Ciò rende difficile trovare la tua strada in Jackson - come sapere qual è il modo corretto/migliore di fare le cose?readValue e readTree in Jackson: quando usare quale?
Perché dovrei utilizzare questa soluzione:
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());
}
}
Nel corso di una soluzione di questo tipo:
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());
}
}
O rispetto alle soluzioni che mi sono imbattuto con JsonFactory e JsonParser e forse ancora più opzioni ...
Sembra mee che mapper.readValue sia più generico e può essere utilizzato in molti casi: leggere JsonNode, ObjectNode, ArrayNode, PoJo, ecc. Quindi, perché dovrei volerci e mapper.readTree?
E qual è il modo migliore per convertire un JsonNode in un ObjectNode? Trasmetti semplicemente su ObjectNode? O usare qualcosa come mapper.convertValue?
grazie, questa è un'informazione utile. Supponevo che convertValue fosse abbastanza intelligente da trasmettere il tipo corretto quando possibile e che sarebbe più sicuro di me stesso ... –
Questa è un'idea interessante - forse un tale codice potrebbe essere aggiunto? Il nome 'convert' è pensato per trasmettere la conversione; non semplicemente cast, ma immagino che non sia un'aspettativa irragionevole. Presenterò un problema di miglioramento per questo. – StaxMan