JSON в классе Java с использованием подхода POJO

Итак, я хочу использовать подход POJO для обработки файла JSON в своем коде, поэтому у меня будет класс с геттерами и сеттерами, и я объявлю в нем свойства. Я понял принцип, но мне все еще не хватает идеи, чтобы понять, как я могу обработать, например, следующий тестовый файл JSON, который я нашел в Интернете, в класс java.

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"
            }
        }
    }
}
}

так, как я понял принцип, который у меня есть сейчас, чтобы создать класс с именем Глоссарий и иметь сеттеры и геттеры для свойств, так что-то вроде этого:

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

Я также нашел этот сайт в Интернете: http://www.jsonschema2pojo.org/, но просто скопируйте и вставить JSON, который у меня есть, не сработает, вероятно, потому, что я не все правильно заявляю, так как я не полностью понял подход


person ECasio    schedule 11.10.2017    source источник
comment
Используйте такой инструмент, как этот github.com/astav/JsonToJava, чтобы вывести иерархию классов Java или подумать о своем JSON и сами напишите соответствующие классы Java. Сначала попытайтесь понять, как работает JSON, почитайте об объектах и ​​массивах JavaScript. Также почитайте о таких фреймворках, как Jackson или GSON.   -  person schneida    schedule 11.10.2017


Ответы (2)


На веб-сайте http://www.jsonschema2pojo.org/ в типе источника: выберите вариант JSON, затем скопируйте и вставьте вывод, он будет работать

person Satish Kr    schedule 11.10.2017
comment
отлично, вот почему это не сработало, я использовал его по умолчанию в схеме JSON, теперь я понял это, большое спасибо - person ECasio; 12.10.2017

Вместо объекта для glossDiv мы должны использовать имя класса, так как здесь GlossDiv — это другой объект в данном JSON.

@JsonProperty("GlossDiv")
private GlossDiv glossDiv;

Преобразование вышеуказанного JSON в объекты java показано ниже.

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

}
person Clement Amarnath    schedule 11.10.2017