轉自:http://blog.csdn.net/ngl272/article/details/70217104html
之前解析json用的慣的就是Google的gson了,用慣了基本就用它了,一直也沒發現什麼大問題,由於都是解析簡單的json數據。可是最近學習springboot,要解析一個比較複雜的json數據。就照以前的用gsonformat自動生成實體類,讓gson直接解析,本想着一切ok了,但是確報錯了,剛開始覺得gsonformat生成的類有錯誤,由於畢竟json數據較爲複雜,因而多生成幾回,但是仍是不行。面對這樣複雜的數據,我可不想手動寫實體類,因而想着又換了自動生成實體類的工具,但是結果仍是未能如願。因而想着能從錯誤的日誌中發現點什麼,但是無奈gson沒有打印具體的出錯的地方,後來搗鼓了很久,想着不如換個解析工具吧。因而上網找了找,以爲Jackson不錯,趕忙試用,發現還真不錯,雖然也沒能解析成功,可是它打印出了詳細的出錯信息,照着出錯的信息改了立刻就解析成功了。spring
說說出錯的緣由:平時解析json呢基本接口提供的json都是很明確的,因此用gson解析通常不會有啥大問題。可是這次狀況不一樣,接口的數據我沒法徹底的預知,因此實體類字段有可能不完整。因此當返回的json數據裏包含了實體類沒有的字段時gson就有可能出錯,可是對於這種狀況用gson解析我是沒找到相應的解決辦法,若是誰知道麻煩告知一下,謝謝。json
固然用Jackson解決就很是容易了,只須要在實體類上加上註解就能夠。springboot
@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存在的字段要忽略的狀況,不能知足如今須要的狀況。工具
@JsonIgnoreProperties(ignoreUnknown = true),將這個註解寫在類上以後,就會忽略類中不存在的字段,能夠知足當前的須要。這個註解還能夠指定要忽略的字段。使用方法以下:學習
@JsonIgnoreProperties({ "internalId", "secretKey" })
指定的字段不會被序列化和反序列化。this
到此順利解決。(還有Gson有相似的實現請告知一下,本人只知道gson轉string忽略字段的方法,謝謝).net
參考:
http://blog.csdn.net/isea533/article/details/33397735
http://www.cnblogs.com/dupang/p/5673097.html日誌