java - example - Jackson, ¿cómo transformar JsonNode en ArrayNode sin enviar contenido?
convert string to json java jackson (2)
¿Existe un método equivalente a getJSONArray en org.json para que tenga el manejo correcto de errores en caso de que no sea una matriz?
Depende de tu entrada; es decir, las cosas que buscas de la URL. Si el valor del atributo "datasets" es una matriz asociativa en lugar de una matriz simple, obtendrá una ClassCastException
.
Pero, una vez más, la corrección de su versión anterior también depende de la entrada. En la situación en la que su nueva versión arroja una ClassCastException
, la versión anterior lanzará JSONException
. Referencia: http://www.json.org/javadoc/org/json/JSONObject.html#getJSONArray(java.lang.String)
Estoy cambiando mi biblioteca JSON de org.json a Jackson y quiero migrar el siguiente código:
JSONObject datasets = readJSON(new URL(DATASETS));
JSONArray datasetArray = datasets.getJSONArray("datasets");
Ahora en Jackson tengo lo siguiente:
ObjectMapper m = new ObjectMapper();
JsonNode datasets = m.readTree(new URL(DATASETS));
ArrayNode datasetArray = (ArrayNode)datasets.get("datasets");
Sin embargo, no me gusta el elenco allí, ¿existe la posibilidad de una ClassCastException
? ¿Existe un método equivalente a getJSONArray
en org.json
para que tenga el manejo correcto de errores en caso de que no sea una matriz?
Sí, el diseño del analizador manual Jackson es bastante diferente de otras bibliotecas. En particular, notará que JsonNode
tiene la mayoría de las funciones que normalmente asociaría con nodos de matriz de otras API. Como tal, no necesita lanzar a un ArrayNode
para usar. Aquí hay un ejemplo:
JSON:
{
"objects" : ["One", "Two", "Three"]
}
Código:
final String json = "{/"objects/" : [/"One/", /"Two/", /"Three/"]}";
final JsonNode arrNode = new ObjectMapper().readTree(json).get("objects");
if (arrNode.isArray()) {
for (final JsonNode objNode : arrNode) {
System.out.println(objNode);
}
}
Salida:
"Uno"
"Dos"
"Tres"
Tenga en cuenta el uso de isArray
para verificar que el nodo sea realmente una matriz antes de iterar. El control no es necesario si confía plenamente en la estructura de sus datos, pero está disponible si lo necesita (y esto no es diferente de la mayoría de las otras bibliotecas JSON).