如果我理解正確的,你有你的項目共同類:
JsonLevel1.java
public class JsonLevel1 {
JsonLevel2 jsonLevel2;
}
JsonLevel2.java
public class JsonLevel2 {
String key1;
String key2;
String key3;
JsonLevel3 jsonLevel3;
}
而且在JsonLevel2類,因爲這個項目中沒有JsonLevel3類,所以存在你的問題。
你可以這樣做。在類JsonLevel2可以插入,而不是JsonLevel3類,一個地圖:
public class JsonLevel2 {
String key1;
String key2;
String key3;
Map<String,String>jsonLevel3;
public String getKey1() {
return key1;
}
public void setKey1(String key1) {
this.key1 = key1;
}
public String getKey2() {
return key2;
}
public void setKey2(String key2) {
this.key2 = key2;
}
public String getKey3() {
return key3;
}
public void setKey3(String key3) {
this.key3 = key3;
}
public Map<String, String> getJsonLevel3() {
return jsonLevel3;
}
public void setJsonLevel3(Map<String, String> jsonLevel3) {
jsonLevel3 = jsonLevel3;
}
}
以這種方式,是不是在你的項目中常見的問題,您可以解析JSON。
在project-c,其中存在JsonLevel3類,在JsonLevel對象中對json進行反序列化後,您可以獲取此映射並將其反序列化到JsonLevel3中。
所以,如果你想讀此JSON在您的項目-C:
{ "jsonLevel1" : {
"jsonLevel2" : {
"key1" : "value1",
"key2" :"value2",
"key3" : "value3",
"jsonLevel3" : {
"string1" : "value11",
"string2" : "value22"
}
}
}}
你可以這樣做:
Gson gson = new Gson();
String filename="/pathTo/json.json";
JsonReader reader = new JsonReader(new FileReader(filename));
JsonLevel jsonlevel= gson.fromJson(reader, JsonLevel.class);
System.out.println("jsonlevel: " + gson.toJson(jsonlevel));
Map<String, String> jl3 = jsonlevel.getJsonLevel1().getJsonLevel2().getJsonLevel3();
/*for (Map.Entry<String, String> entry : jl3.entrySet())
{
System.out.println(entry.getKey() + "/" + entry.getValue());
}*/
JsonLevel3 jlev3=gson.fromJson(gson.toJson(jl3), JsonLevel3.class);
System.out.println("jlev3: " + gson.toJson(jlev3));
有了,當然,JsonLevel類等於
public class JsonLevel {
JsonLevel1 jsonLevel1;
public JsonLevel1 getJsonLevel1() {
return jsonLevel1;
}
public void setJsonLevel1(JsonLevel1 jsonLevel1) {
this.jsonLevel1 = jsonLevel1;
}
}
編輯
我以爲你的最終json有你的問題描述的結構。這就是爲什麼我使用JsonLevel3的Map<String,String>
。
如果JsonLevel3不是您的最後一級,而是使用Map<String,String>
,您可以使用Map<String, Object>
。
例如,如果JSON的是:
{
"jsonLevel1":{
"jsonLevel2":{
"key1":"value1",
"key2":"value2",
"key3":"value3",
"jsonLevel3":{
"string1":"value11",
"string2":"value22",
"jsonLevel4":{
"int1":1,
"int2":2
}
}
}
}
}
JsonLevel2將是:
public class JsonLevel2 {
String key1;
String key2;
String key3;
Map<String,Object>jsonLevel3;
這樣,地圖的價值是一切(是不是被迫成爲一個如前所述的字符串)。所以,在你將反序列化你的json之後,你可以做同樣的事情,以前的任何內容JsonLevel3:
Gson gson = new Gson();
String filename="/pathTo/json.json";
JsonReader reader = new JsonReader(new FileReader(filename));
JsonLevel jsonlevel= gson.fromJson(reader, JsonLevel.class);
System.out.println("jsonlevel: " + gson.toJson(jsonlevel));
Map<String, Object> jl3 = jsonlevel.getJsonLevel1().getJsonLevel2().getJsonLevel3();
Map<String, Integer> jl4= (Map<String, Integer>) jl3.get("jsonLevel4");
JsonLevel3 jlev3=gson.fromJson(gson.toJson(jl3), JsonLevel3.class);
JsonLevel4 jlev4= gson.fromJson(gson.toJson(jl4), JsonLevel4.class);
System.out.println("jlev3: " + gson.toJson(jlev3));
System.out.println("jlev4: " + gson.toJson(jlev4));
這是一個非常好的出路。但問題是JsonLevel3可能不是最後一個級別。它內部可能有JsonLevel4。並在project-d JsonLevel4結構中有所不同。實際上有近10個項目,具有相同的json結構,達到3級,然後對於不同的項目是不同的。我想保持共同項目中的共同班級結構。 – Deb
@Deb我剛剛編輯了答案。 –
只是一個問題。通過迭代它從地圖讀取值。我如何區分Primitive和Object。 – Deb