我意識到這可能已經被問了上百次了,但是我搜索了很多,並且找不到具體的東西。Java JSON反序列化沒有預先定義好所有的東西
這是我想要的。給定一個字符串data
,我想反序列化一個對象obj
,它沒有預定義所有的字段。我希望能夠詢問我想要的字段,如obj.getString("stringFieldName")
或obj.getInt("intFieldName")
。我已經把gson用於其他的東西,所以如果gson可能會很棒,但不會反對使用另一個庫。
我意識到這可能已經被問了上百次了,但是我搜索了很多,並且找不到具體的東西。Java JSON反序列化沒有預先定義好所有的東西
這是我想要的。給定一個字符串data
,我想反序列化一個對象obj
,它沒有預定義所有的字段。我希望能夠詢問我想要的字段,如obj.getString("stringFieldName")
或obj.getInt("intFieldName")
。我已經把gson用於其他的東西,所以如果gson可能會很棒,但不會反對使用另一個庫。
「標準」Android JSON庫(自API 1開始)已經提供了這種無類型訪問。
參見JSONObject,例如。 getInt:
如果存在並且是一個int,或者可以強制爲一個int,或者以其他方式拋出,則返回通過名稱映射的值。
除非需要將JSON映射到「本地」Java集合類型,否則這可能是實現請求的最簡單方法。它不需要任何額外的庫。
您是否嘗試過使用Square的Retrofit?它可以與GSON和Java Annotations一起使用,並且它非常易於設置。
與傑克遜庫,您可以註釋數據模型類
@JsonIgnoreProperties(ignoreUnknown = true)
和jacksonconverter只會解析只有這些你定義的字段。其他將被忽略。
[This](http://stackoverflow.com/questions/2525042/how-to-convert-a-json-string-to-a-mapstring-string-with-jackson-json)可能會有所幫助。 –
@ user2864740 JSON處理的事實標準是傑克遜。我從來沒有見過任何人直接使用JEE API。這麼多的標準:) –