Read JSON with Gson in Java

0

I'm trying to read a JSON file with the following structure, I need to get "one" and "three"

   {
    "images": [
        {
            "classifiers": [
                {
                    "classifier_id": "id",
                    "name": "name",
                    "classes": [
                        {
                            "class": "uno",
                            "score": 0.770309
                        },
                        {
                            "class": "tres",
                            "score": 0.599846
                        }
                    ]
                }
            ],
            "image": "tablero.jpg"
        }
    ],
    "images_processed": 1,
    "custom_classes": 6
}

Currently I achieve it this way, but I want to read it through a loop since there may be more data of that type to collect.

Gson gson = new Gson();
JsonParser parser = new JsonParser();
FileReader fr;
try {
  fr = new FileReader("documento.json");
  JsonElement datos = parser.parse(fr);
  //Obtenemos images
  JsonObject jobject = datos.getAsJsonObject();
  JsonArray arrayImages = jobject.getAsJsonArray("images");
  System.out.println("jarray" + arrayImages);
  jobject = arrayImages.get(0).getAsJsonObject();
  //obtenemos classifiers 
  JsonArray arrayClassifiers = jobject.getAsJsonArray("classifiers");
  System.out.println("Classifiers" + arrayClassifiers);
  jobject = arrayClassifiers.get(0).getAsJsonObject();
  //obtenemos classes
  JsonArray arrayClasses = jobject.getAsJsonArray("classes");
  System.out.println("Classes" + arrayClasses);

  //Recorrer el arrayClasses y coger la primitiva class

  jobject = arrayClasses.get(0).getAsJsonObject();

  JsonPrimitive clase = jobject.getAsJsonPrimitive("class");
  System.out.println("primitiva " + clase);


  jobject = arrayClasses.get(1).getAsJsonObject();
  JsonPrimitive prim2 = jobject.getAsJsonPrimitive("class");

  System.out.println("primitiva " + prim2);
    
asked by Silvia 21.02.2018 в 20:41
source

1 answer

1

The model of classes that model that json would be the following:

Note that class is a reserved word in java, so you need to specify the serialized name with the annotation @SerializedName

class ClassScore {

    @SerializedName("class")
    private String className;
    private double score;

    public ClassScore() {
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

}

class Classifier {

    private String classifier_id;
    private String name;
    private ClassScore[] classes;

    public Classifier() {
    }

    public String getClassifier_id() {
        return classifier_id;
    }

    public void setClassifier_id(String classifier_id) {
        this.classifier_id = classifier_id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ClassScore[] getClasses() {
        return classes;
    }

    public void setClasses(ClassScore[] classes) {
        this.classes = classes;
    }

}

class Image {

    private Classifier[] classifiers;
    private String image;

    public Image() {
    }

    public Classifier[] getClassifiers() {
        return classifiers;
    }

    public void setClassifiers(Classifier[] classifiers) {
        this.classifiers = classifiers;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

}

class ImagesData {

    private Image[] images;
    private int images_processed;
    private int custom_classes;

    public ImagesData() {
    }

    public Image[] getImages() {
        return images;
    }

    public void setImages(Image[] images) {
        this.images = images;
    }

    public int getImages_processed() {
        return images_processed;
    }

    public void setImages_processed(int images_processed) {
        this.images_processed = images_processed;
    }

    public int getCustom_classes() {
        return custom_classes;
    }

    public void setCustom_classes(int custom_classes) {
        this.custom_classes = custom_classes;
    }

}

And to parse the json serious:

Gson gson = new Gson();
ImagesData imagesData = gson.fromJson(jsonString, ImagesData.class);
    
answered by 21.02.2018 / 22:48
source