/ / Wie man Jackson benutzt, um zu deserialisieren - json, spring-mvc, jackson

Wie benutzt man Jackson zur Deserialisierung - Json, Spring-MVC, Jackson

Json-Objekt vom REST-Service

{
"destination_addresses" : [ "Chicago, IL, USA" ],
"origin_addresses" : [ "Syracuse, NY, USA" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "1,090 km",
"value" : 1090383
},
"duration" : {
"text" : "10 hours 21 mins",
"value" : 37242
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}

Verwenden von Code aus JacksonInFiveMinutes

ObjectMapper mapper = new ObjectMapper (); Map userData = mapper.readValue (webResource.queryParams (queryParams) .get (String.class) ;, Map.class);

Woher:

webResource.queryParams(queryParams).get(String.class);

Gibt den json vom REST-Service zurück

Von Json möchte ich die 2 Adresseigenschaften sowie die Entfernungseigenschaft sowie den 2 Status.

Mein Hackversuch:

ObjectMapper mapper = new ObjectMapper();
JsonNode jnode = mapper.readValue(s, JsonNode.class);
jnode.findValue("distance").findValue("value") //

Das bringt mir den Wert, den ich suche.

Ich bin mir nicht sicher, ob dies ein guter Weg ist

Antworten:

1 für die Antwort № 1

Es sieht für mich in Ordnung aus, außer dass es sicherer wäre, diese beiden nicht zu verketten findValue() ruft zusammen auf, da Sie eine NPE erhalten könnten, wenn die JSON-Zeichenfolge nicht die erste enthält. Aus dem JsonNode-Javadoc:

public abstract JsonNode findValue(String fieldName)

Methode zum Suchen eines JSON-Objektfelds mit dem angegebenen Namen Knoten oder seine untergeordneten Knoten und Rückgabewert hat. Wenn nicht passend Feld ist in diesem Knoten oder seinen Nachkommen gefunden, gibt null zurück.

Also habe ich zuerst nachgesehen findValue() result und wenn es nicht null ist, dann führe die zweite aus findValue() (mit Protokollierung, um Sie zu benachrichtigen, wenn dies passiert).