Как извлечь данные из моего массива simplejson? - PullRequest
1 голос
/ 03 мая 2019

Я хочу извлечь всю аннотацию моего объекта JSONArray, и я нашел этот пост https://www.mkyong.com/java/json-simple-example-read-and-write-json/. Проблема в том, что мой JSONArray является своего рода "массивом массива":

[{"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}]}]

Я попробовал этот код (из поста, на который я ссылался)

 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);
 }

И результат "нулевой", и я думаю, что это потому, что мне нужно перейти в массив "аннотации", и на данный момент я тольков "АннотацияОфзелда"

Ответы [ 3 ]

1 голос
/ 03 мая 2019

Попробуйте как ниже:

 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) ;
         }

    }
1 голос
/ 03 мая 2019

Попробуйте, вы можете использовать его для определенного значения в JSON (аннотация: "asd") или для полного JSON:

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();
        }
    }
}

Вывод [{"duration": 5000, "annotation": "salut", "timestamp": 2250.0}, {"duration":5000, "аннотация": "jp", "отметка времени": 4570.0}] "asd" "asd"

0 голосов
/ 03 мая 2019

Я нашел способ сделать это, даже если это не очень красиво выглядит

System.out.println(annotationJSON.toJSONString());
JSONObject tmp = (JSONObject) annotationJSON.get(0);
System.out.println("......");
JSONArray tmpArr = (JSONArray) tmp.get("AnnotationOfzelda");
for (int i = 0; i < tmpArr.size(); i++) {
 tmp = (JSONObject) tmpArr.get(i);
 System.out.println(tmp.get("annotation"));
}

...