继续昨天的问题http://blog.csdn.net/qq_25189723/article/details/78848521
遇到个解析json的问题,返回的json数据中包含不同的实体类,实体类的键值是确定的但是类型是不确定的。(描述可能不对,下面给出json例子)
json数据例子如下:
String dataA = "{a:1, b:'Hello,world!', c:true, d:{aa:1}}";
String dataB = "{a:2, b:'Hello,world!', c:true, d:{ba:1, bb:'Hello word!'}}";
String dataC = "{a:3, b:'Hello,world!', c:true, d:{ca:1, cb:'Hello,:world!', cc:true}}";
今天想到一个新的做法,就是把不确定的那些实体类的属性变量全部集中在一起组成一个总的实体类。例子如下。
EntityAll.java
public class EntityAll {
private int a;
private String b;
private boolean c;
private ObjectAll d;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public boolean isC() {
return c;
}
public void setC(boolean c) {
this.c = c;
}
public ObjectAll getD() {
return d;
}
public void setD(ObjectAll d) {
this.d = d;
}
@Override
public String toString() {
return "EntityAll [a=" + a + ", b=" + b + ", c=" + c + ", d=" + d + "]";
}
}
ObjectAll.java
public class ObjectAll {
private int aa;
private int ba;
private String bb;
private int ca;
private String cb;
private boolean cc;
public int getAa() {
return aa;
}
@Override
public String toString() {
return "ObjectAll [aa=" + aa + ", ba=" + ba + ", bb=" + bb + ", ca=" + ca + ", cb=" + cb + ", cc=" + cc + "]";
}
public void setAa(int aa) {
this.aa = aa;
}
public int getBa() {
return ba;
}
public void setBa(int ba) {
this.ba = ba;
}
public String getBb() {
return bb;
}
public void setBb(String bb) {
this.bb = bb;
}
public int getCa() {
return ca;
}
public void setCa(int ca) {
this.ca = ca;
}
public String getCb() {
return cb;
}
public void setCb(String cb) {
this.cb = cb;
}
public boolean isCc() {
return cc;
}
public void setCc(boolean cc) {
this.cc = cc;
}
}
DA.java
public class DA {
private int aa;
public int getAa() {
return aa;
}
public void setAa(int aa) {
this.aa = aa;
}
@Override
public String toString() {
return "DA [aa=" + aa + "]";
}
}
DB.java
public class DB {
private int ba;
private String bb;
public int getBa() {
return ba;
}
public void setBa(int ba) {
this.ba = ba;
}
public String getBb() {
return bb;
}
public void setBb(String bb) {
this.bb = bb;
}
@Override
public String toString() {
return "DB [ba=" + ba + ", bb=" + bb + "]";
}
}
DC.java
public class DC {
private int ca;
private String cb;
private boolean cc;
public DC(int ca, String cb, boolean cc) {
super();
this.ca = ca;
this.cb = cb;
this.cc = cc;
}
public int getCa() {
return ca;
}
public void setCa(int ca) {
this.ca = ca;
}
public String getCb() {
return cb;
}
public void setCb(String cb) {
this.cb = cb;
}
public boolean isCc() {
return cc;
}
public void setCc(boolean cc) {
this.cc = cc;
}
@Override
public String toString() {
return "DC [ca=" + ca + ", cb=" + cb + ", cc=" + cc + "]";
}
}
jsontestall.java
import com.google.gson.Gson;
public class jsontestall {
public static void main(String[] args) {
String dataA = "{a:1, b:'Hello,world!', c:true, d:{aa:1}}";
String dataB = "{a:2, b:'Hello,world!', c:true, d:{ba:1, bb:'Hello word!'}}";
String dataC = "{a:3, b:'Hello,world!', c:true, d:{ca:1, cb:'Hello,:world!', cc:true}}";
Gson gson = new Gson();
EntityAll ea = gson.fromJson(dataA, EntityAll.class);
EntityAll eb = gson.fromJson(dataB, EntityAll.class);
EntityAll ec = gson.fromJson(dataC, EntityAll.class);
System.out.println("ea ="+ea.toString());
System.out.println("eb ="+eb.toString());
System.out.println("ec ="+ec.toString());
System.out.println("");
if(ea.getA()==1){
try {
String d = gson.toJson(ea.getD(), ObjectAll.class);
System.out.println("d ="+d);
DA da = gson.fromJson(d, DA.class);
System.out.println("da ="+da.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("");
if(eb.getA()==2){
try {
String d = gson.toJson(eb.getD(), ObjectAll.class);
System.out.println("d ="+d);
DB db = gson.fromJson(d, DB.class);
System.out.println("db ="+db.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("");
if(ec.getA()==3){
try {
String d = gson.toJson(ec.getD(), ObjectAll.class);
System.out.println("d ="+d);
DC dc = gson.fromJson(d, DC.class);
System.out.println("dc ="+dc.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
运行结果
ea =EntityAll [a=1, b=Hello,world!, c=true, d=ObjectAll [aa=1, ba=0, bb=null, ca=0, cb=null, cc=false]]
eb =EntityAll [a=2, b=Hello,world!, c=true, d=ObjectAll [aa=0, ba=1, bb=Hello word!, ca=0, cb=null, cc=false]]
ec =EntityAll [a=3, b=Hello,world!, c=true, d=ObjectAll [aa=0, ba=0, bb=null, ca=1, cb=Hello,:world!, cc=true]]
d ={"aa":1,"ba":0,"ca":0,"cc":false}
da =DA [aa=1]
d ={"aa":0,"ba":1,"bb":"Hello word!","ca":0,"cc":false}
db =DB [ba=1, bb=Hello word!]
d ={"aa":0,"ba":0,"ca":1,"cb":"Hello,:world!","cc":true}
dc =DC [ca=1, cb=Hello,:world!, cc=true]
用这种方法可以正确解析。
本文链接 http://blog.csdn.net/qq_25189723/article/details/78850148