He encontrado varias respuestas que están cerca de lo que estoy tratando de hacer, pero no lo suficiente como para haber podido hacerlo funcionar. Tengo un montón de JSON que se parece a este ejemplo (solo en realidad varios niveles más profundos y con cientos de elementos en el nivel al que quiero acceder): {"query":{"pages":{"links":[{"word":"bobsyeruncle","code":4},{"word":"easyaspie","code":3}]}}}
. No puedo cambiar el formato; es la API de otra persona. Hay bastante de esto que no necesito; de hecho, solo quiero algo como una matriz de ["bobsyeruncle", "easyaspie"]. (O una lista o lo que sea)Recuperar cadenas de la matriz JSON utilizando Jackson
Experimenté con una versión más simple de JSON que no tenía una matriz, y pude acceder a una sola cadena fácilmente usando rootNode.get ("query"). Get ("páginas") ... forma descrita en https://stackoverflow.com/questions/338586/a-better-java-json-library/338608#338608. Pero no he podido llegar a la matriz de esa manera. La mayoría de las respuestas que he encontrado aquí asumen que quiero crear un POJO como "Enlaces" que incluye tanto "palabra" como "código", cosa que no hago. Para acceder a las cadenas que quiero, ¿es necesario crear algo así como una lista de "Enlaces" que incluya tanto "palabra" como "código" y luego ignorar "código"? Eso no parece correcto.
(Además, si alguien me podría apuntar a la documentación/tutoriales en algún lugar entre el tutorial JacksonInFiveMinutes y todo el javadoc, estoy seguro de que eso ayudaría también.)
ETA esto funcionó, creo !:
String theJsonString = "{\"query\":{\"pages\":{\"links\":"
+ "[{\"word\":\"bobsyeruncle\"},{\"word\":\"easyaspie\"}]}}}";
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(theJsonString);
JsonNode interestingObjectNode = rootNode.path("query").path("pages").path("links");
for (int i = 0; i < interestingObjectNode.size(); i ++) {
System.out.println(interestingObjectNode.get(i).path("word").asText());
}
Eliminado mi comentario anterior - Llegué allí, coloque algún código arriba en caso de que alguien encuentre esta pregunta. – umbraphile
¿Seguro? ¿Qué quieres decir con "Seguro" en ese uso de jackson? @StaxMan – gumuruh
Seguro significa que si usa 'get' y no hay ningún nodo coincidente, devuelve null y debe estar marcado. Pero con 'ruta', se devuelve un "nodo faltante" virtual, por lo que no se necesitan verificaciones nulas. – StaxMan