¿Cómo extraer datos de mi matriz simplejson?

Quiero extraer toda la anotación de mi objeto JSONArray y encontré esta publicación https://www.mkyong.com/java/json-simple-example-read-and-write-json/ . El problema es que mi JSONArray es una especie de "matriz de matriz":

[{"AnnotationOfzelda":
 [{"annotation":
  [{"duration":5000,"annotation":"salut","timestamp":2250.0}, 
   {"duration":5000,"annotation":"jp","timestamp":4570.0}]}, 
   {"duration":5000,"annotation":"asd","timestamp":3340.0}, 
   {"duration":5000,"annotation":"asd","timestamp":4040.0}]}]

Probé este código (de la publicación que vinculé)

 System.out.println(annotationJSON.toJSONString());

 Iterator<JSONObject> iterator = annotationJSON.iterator();
 while (iterator.hasNext()) {
  JSONObject factObj = (JSONObject) iterator.next();
  String annotation = (String) factObj.get("annotation");
  System.out.println(annotation);
 }

Y el resultado es "nulo" y creo que es porque necesito ir a la matriz "anotación" y en este momento solo estoy en "AnotaciónOfzelda"

Respuesta 1

Pruebe esto, puede usarlo para un valor específico en JSON (anotación: "asd") o para JSON completo:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;
import java.util.Iterator;

public class Sol {
    public static void main(String[] args) {
        String data = "[{\"AnnotationOfzelda\":\n" +
                " [{\"annotation\":\n" +
                "  [{\"duration\":5000,\"annotation\":\"salut\",\"timestamp\":2250.0}, \n" +
                "   {\"duration\":5000,\"annotation\":\"jp\",\"timestamp\":4570.0}]}, \n" +
                "   {\"duration\":5000,\"annotation\":\"asd\",\"timestamp\":3340.0}, \n" +
                "   {\"duration\":5000,\"annotation\":\"asd\",\"timestamp\":4040.0}]}]";
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode jsonNode = null;
        try {
            jsonNode = objectMapper.readTree(data);
            Iterator iterator = jsonNode.iterator();
            while (iterator.hasNext()) {
                JsonNode node = (JsonNode) iterator.next();
                if (node.get("annotation") != null) {
                    System.out.println(node.get("annotation"));
                    continue;
                }
                if (node.iterator().hasNext()) {
                    iterator = node.iterator();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Respuesta: 2

Intenta como a continuación:

 JSONArray jsonArray = annotationJSON.getJSONArray("AnnotationOfzelda
    ");//getting array
     for (int i = 0; i < jsonArray.length(); i++) {
      JSONObject jsonobject= jsonArray.getJSONObject(i);//getting first element 
       String duration1= jsonobject.getString("duration");//getting duration
              String annotation1= jsonobject.getString("annotation");//getting annotation1
               String timestamp1= jsonobject.getString("timestamp");//getting timestamp
     JSONArray jsonObject1= jsonobject.getJSONArray("annotation"); //getting children array
      for (int j = 0; j < jsonObject1.length(); j++) {
             JSONObject object1 = jsonObject1.getJSONObject(j);
             String duration= object1.getString("duration");//getting duration

              String duration= object1.getString("annotation");//getting annotation
               String duration= object1.getString("timestamp");//getting timestamp
          System.out.println(""+duration+""annotation""+timestamp) ;
         }

    }
Respuesta: 3

Posible duplicado: ¿Cómo puedo interactuar con el diseño de la pantalla de bloqueo para mostrar texto en él, como esta aplicación: Quiero mostrar algo de texto en la pantalla de bloqueo de Android igual que la aplicación de Android 'Me gusta' ...

Soy nuevo en Scala y nuestro proyecto combina código Java y Scala (usando Play Framework). Estoy tratando de escribir un método Scala que pueda tomar un mapa Java anidado como: LinkedHashMap <String, ...

Tengo una base de código java que genera un hash codificado en base64 seguro para URL a partir de una cadena, y me pregunto si esto sería posible con las herramientas de línea de comandos de Linux. Estoy adivinando el problema con lo que yo ...

Estoy enfrentando un problema al cerrar las conexiones de la base de datos. Recibo el siguiente error ============================================ ====================================== 267137 [http-8080-Processor23] ...