以前解析json用的慣的就是Google的gson了,用慣了基本就用它了,一直也沒發(fā)現(xiàn)什么大問題,因?yàn)槎际墙馕龊?jiǎn)單的json數(shù)據(jù)。但是最近學(xué)習(xí)springboot,要解析一個(gè)比較復(fù)雜的json數(shù)據(jù)。就照之前的用gsonformat自動(dòng)生成實(shí)體類,讓gson直接解析,本想著一切ok了,可是確報(bào)錯(cuò)了,剛開始以為gsonformat生成的類有錯(cuò)誤,因?yàn)楫吘筳son數(shù)據(jù)較為復(fù)雜,于是多生成幾次,可是還是不行。面對(duì)這樣復(fù)雜的數(shù)據(jù),我可不想手動(dòng)寫實(shí)體類,于是想著又換了自動(dòng)生成實(shí)體類的工具,可是結(jié)果還是未能如愿。于是想著能從錯(cuò)誤的日志中發(fā)現(xiàn)點(diǎn)什么,可是無奈gson沒有打印具體的出錯(cuò)的地方,后來?yè)v鼓了好久,想著不如換個(gè)解析工具吧。于是上網(wǎng)找了找,覺得Jackson不錯(cuò),趕緊試用,發(fā)現(xiàn)還真不錯(cuò),雖然也沒能解析成功,但是它打印出了詳細(xì)的出錯(cuò)信息,照著出錯(cuò)的信息改了馬上就解析成功了。
說說出錯(cuò)的原因:平時(shí)解析json呢基本接口提供的json都是很明確的,所以用gson解析一般不會(huì)有啥大問題。但是此次情況不同,接口的數(shù)據(jù)我無法完全的預(yù)知,所以實(shí)體類字段有可能不完整。所以當(dāng)返回的json數(shù)據(jù)里包含了實(shí)體類沒有的字段時(shí)gson就有可能出錯(cuò),但是對(duì)于這種情況用gson解析我是沒找到相應(yīng)的解決辦法,如果誰(shuí)知道麻煩告知一下,謝謝。
當(dāng)然用Jackson解決就非常容易了,只需要在實(shí)體類上加上注解就可以。
@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方法時(shí),和Filed效果一樣。這個(gè)注解只能用在POJO存在的字段要忽略的情況,不能滿足現(xiàn)在需要的情況。
@JsonIgnoreProperties(ignoreUnknown = true),將這個(gè)注解寫在類上之后,就會(huì)忽略類中不存在的字段,可以滿足當(dāng)前的需要。這個(gè)注解還可以指定要忽略的字段。使用方法如下:
@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的字段不會(huì)被序列化和反序列化。
到此順利解決。(還有Gson有類似的實(shí)現(xiàn)請(qǐng)告知一下,本人只知道gson轉(zhuǎn)string忽略字段的方法,謝謝)
參考:
http://blog.csdn.net/isea533/article/details/33397735
http://www.cnblogs.com/dupang/p/5673097.html