1

So I want to use the POJO approach to handle a JSON file in my coding, so I will have a class with getters and setters and declare the properties in it. I understood the principle but I am still lacking the idea to understand how I can handle for example the following test JSON file I found on the web into a java class.

JSON:

{
"glossary": {
    "title": "example glossary",
    "GlossDiv": {
        "title": "S",
        "GlossList": {
            "GlossEntry": {
                "ID": "SGML",
                "SortAs": "SGML",
                "GlossTerm": "Standard Generalized Markup Language",
                "Acronym": "SGML",
                "Abbrev": "ISO 8879:1986",
                "GlossDef": {
                    "para": "A meta-markup language, used to create markup languages such as DocBook.",
                    "GlossSeeAlso": ["GML", "XML"]
                },
                "GlossSee": "markup"
            }
        }
    }
}
}

so the way I understood the principle I have now to create a class called Glossary and have setters and getters for the properties so something like this:

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"title",
"GlossDiv",
 // GlossList, GlossEntry, ID, SortAs and so on also here probably?
})
public class Glossary {

@JsonProperty("title")
private String title;
@JsonProperty("GlossDiv")
private Object glossDiv; // I am already at this point here not sure is it an Object? 
//I mean GlossDiv has other properties in itself so what do I put here? 
//since it is not an Array I don't use a Map or List do I ?


@JsonProperty("title")
public String getTitle() {
return title;
}

@JsonProperty("title")
public void setTitle(String title) {
this.title = title;
}
}

I also found this site on the web: http://www.jsonschema2pojo.org/ but just copy & paste the JSON I have will not work probably because I am not declaring everything right since I don't fully understood the approach

TechAffinate
  • 61
  • 1
  • 14
  • Use a tool like this https://github.com/astav/JsonToJava to deduce a Java class hierarchy or think about your JSON and write the appropriate java classes yourself. Try to understand how JSON works first, read about JavaScript objects and arrays. Also read up on frameworks like Jackson or GSON. – schneida Oct 11 '17 at 14:59

2 Answers2

2

On http://www.jsonschema2pojo.org/ website in Source type: Choose JSON option Then copy paste the output it will work

Satish Kr
  • 590
  • 5
  • 12
2

Instead of object for glossDiv, we should use class name, since here GlossDiv is another object in the given JSON.

@JsonProperty("GlossDiv")
private GlossDiv glossDiv;

Conversion of above JSON to java objects is shown below

com.json.pojo.ExploreJson.java

package com.json.pojo;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"glossary"
})
public class ExploreJson {

@JsonProperty("glossary")
private Glossary glossary;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("glossary")
public Glossary getGlossary() {
return glossary;
}

@JsonProperty("glossary")
public void setGlossary(Glossary glossary) {
this.glossary = glossary;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------com.json.pojo.GlossDef.java-----------------------------------

package com.json.pojo;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"para",
"GlossSeeAlso"
})
public class GlossDef {

@JsonProperty("para")
private String para;
@JsonProperty("GlossSeeAlso")
private List<String> glossSeeAlso = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("para")
public String getPara() {
return para;
}

@JsonProperty("para")
public void setPara(String para) {
this.para = para;
}

@JsonProperty("GlossSeeAlso")
public List<String> getGlossSeeAlso() {
return glossSeeAlso;
}

@JsonProperty("GlossSeeAlso")
public void setGlossSeeAlso(List<String> glossSeeAlso) {
this.glossSeeAlso = glossSeeAlso;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------com.json.pojo.GlossDiv.java-----------------------------------

package com.json.pojo;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"title",
"GlossList"
})
public class GlossDiv {

@JsonProperty("title")
private String title;
@JsonProperty("GlossList")
private GlossList glossList;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("title")
public String getTitle() {
return title;
}

@JsonProperty("title")
public void setTitle(String title) {
this.title = title;
}

@JsonProperty("GlossList")
public GlossList getGlossList() {
return glossList;
}

@JsonProperty("GlossList")
public void setGlossList(GlossList glossList) {
this.glossList = glossList;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------com.json.pojo.GlossEntry.java-----------------------------------

package com.json.pojo;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"ID",
"SortAs",
"GlossTerm",
"Acronym",
"Abbrev",
"GlossDef",
"GlossSee"
})
public class GlossEntry {

@JsonProperty("ID")
private String iD;
@JsonProperty("SortAs")
private String sortAs;
@JsonProperty("GlossTerm")
private String glossTerm;
@JsonProperty("Acronym")
private String acronym;
@JsonProperty("Abbrev")
private String abbrev;
@JsonProperty("GlossDef")
private GlossDef glossDef;
@JsonProperty("GlossSee")
private String glossSee;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("ID")
public String getID() {
return iD;
}

@JsonProperty("ID")
public void setID(String iD) {
this.iD = iD;
}

@JsonProperty("SortAs")
public String getSortAs() {
return sortAs;
}

@JsonProperty("SortAs")
public void setSortAs(String sortAs) {
this.sortAs = sortAs;
}

@JsonProperty("GlossTerm")
public String getGlossTerm() {
return glossTerm;
}

@JsonProperty("GlossTerm")
public void setGlossTerm(String glossTerm) {
this.glossTerm = glossTerm;
}

@JsonProperty("Acronym")
public String getAcronym() {
return acronym;
}

@JsonProperty("Acronym")
public void setAcronym(String acronym) {
this.acronym = acronym;
}

@JsonProperty("Abbrev")
public String getAbbrev() {
return abbrev;
}

@JsonProperty("Abbrev")
public void setAbbrev(String abbrev) {
this.abbrev = abbrev;
}

@JsonProperty("GlossDef")
public GlossDef getGlossDef() {
return glossDef;
}

@JsonProperty("GlossDef")
public void setGlossDef(GlossDef glossDef) {
this.glossDef = glossDef;
}

@JsonProperty("GlossSee")
public String getGlossSee() {
return glossSee;
}

@JsonProperty("GlossSee")
public void setGlossSee(String glossSee) {
this.glossSee = glossSee;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------com.json.pojo.GlossList.java-----------------------------------

package com.json.pojo;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"GlossEntry"
})
public class GlossList {

@JsonProperty("GlossEntry")
private GlossEntry glossEntry;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("GlossEntry")
public GlossEntry getGlossEntry() {
return glossEntry;
}

@JsonProperty("GlossEntry")
public void setGlossEntry(GlossEntry glossEntry) {
this.glossEntry = glossEntry;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
-----------------------------------com.json.pojo.Glossary.java-----------------------------------

package com.json.pojo;

import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"title",
"GlossDiv"
})
public class Glossary {

@JsonProperty("title")
private String title;
@JsonProperty("GlossDiv")
private GlossDiv glossDiv;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonProperty("title")
public String getTitle() {
return title;
}

@JsonProperty("title")
public void setTitle(String title) {
this.title = title;
}

@JsonProperty("GlossDiv")
public GlossDiv getGlossDiv() {
return glossDiv;
}

@JsonProperty("GlossDiv")
public void setGlossDiv(GlossDiv glossDiv) {
this.glossDiv = glossDiv;
}

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

}
Clement Amarnath
  • 5,301
  • 1
  • 21
  • 34