以前解析json用的慣的就是Google的gson了痘括,用慣了基本就用它了吠裆,一直也沒發(fā)現(xiàn)什么大問題养篓,因為都是解析簡單的json數(shù)據(jù)。但是最近學(xué)習(xí)springboot忠聚,要解析一個比較復(fù)雜的json數(shù)據(jù)设哗。就照之前的用gsonformat自動生成實體類,讓gson直接解析两蟀,本想著一切ok了熬拒,可是確報錯了,剛開始以為gsonformat生成的類有錯誤垫竞,因為畢竟json數(shù)據(jù)較為復(fù)雜,于是多生成幾次蛀序,可是還是不行欢瞪。面對這樣復(fù)雜的數(shù)據(jù),我可不想手動寫實體類徐裸,于是想著又換了自動生成實體類的工具遣鼓,可是結(jié)果還是未能如愿。于是想著能從錯誤的日志中發(fā)現(xiàn)點什么重贺,可是無奈gson沒有打印具體的出錯的地方骑祟,后來搗鼓了好久回懦,想著不如換個解析工具吧。于是上網(wǎng)找了找次企,覺得Jackson不錯怯晕,趕緊試用,發(fā)現(xiàn)還真不錯缸棵,雖然也沒能解析成功舟茶,但是它打印出了詳細(xì)的出錯信息,照著出錯的信息改了馬上就解析成功了堵第。
說說出錯的原因:平時解析json呢基本接口提供的json都是很明確的吧凉,所以用gson解析一般不會有啥大問題。但是此次情況不同踏志,接口的數(shù)據(jù)我無法完全的預(yù)知阀捅,所以實體類字段有可能不完整。所以當(dāng)返回的json數(shù)據(jù)里包含了實體類沒有的字段時gson就有可能出錯针余,但是對于這種情況用gson解析我是沒找到相應(yīng)的解決辦法饲鄙,如果誰知道麻煩告知一下,謝謝涵紊。
當(dāng)然用Jackson解決就非常容易了傍妒,只需要在實體類上加上注解就可以。
@JsonIgnoreProperties(ignoreUnknown = true)
class ExtraBean {
private boolean is_museuser;
public boolean isIs_museuser() {
return is_museuser;
}
public void setIs_museuser(boolean is_museuser) {
this.is_museuser = is_museuser;
}
}
@JsonIgnore注解用來忽略某些字段摸柄,可以用在Field或者Getter方法上颤练,用在Setter方法時,和Filed效果一樣驱负。這個注解只能用在POJO存在的字段要忽略的情況嗦玖,不能滿足現(xiàn)在需要的情況。
@JsonIgnoreProperties(ignoreUnknown = true)跃脊,將這個注解寫在類上之后宇挫,就會忽略類中不存在的字段,可以滿足當(dāng)前的需要酪术。這個注解還可以指定要忽略的字段器瘪。使用方法如下:
@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的字段不會被序列化和反序列化。
到此順利解決绘雁。(還有Gson有類似的實現(xiàn)請告知一下橡疼,本人只知道gson轉(zhuǎn)string忽略字段的方法,謝謝)
參考:
http://blog.csdn.net/isea533/article/details/33397735
http://www.cnblogs.com/dupang/p/5673097.html