天天看點

json反射java對象_Jackson通過反射将Json轉化為java對象

Jackson的功能比較強大,我們這裡主要使用Data Binding的方式,來看看如何使用反射将json轉化為java bean,先加入如下依賴:

json反射java對象_Jackson通過反射将Json轉化為java對象

Jackson 的核心子產品由三部分組成。

jackson-core,核心包,提供基于"流模式"解析的相關 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 内部實作正是通過高性能的流模式 API 的 JsonGenerator 和 JsonParser 來生成和解析 json。

jackson-annotations,注解包,提供标準注解功能;

jackson-databind ,資料綁定包, 提供基于"對象綁定" 解析的相關 API ( ObjectMapper ) 和"樹模型" 解析的相關 API (JsonNode);基于"對象綁定" 解析的 API 和"樹模型"解析的 API 依賴基于"流模式"解析的 API。

然後我們就可以寫個demo看看:

json反射java對象_Jackson通過反射将Json轉化為java對象

輸出:

json反射java對象_Jackson通過反射将Json轉化為java對象

入參都是類似的,傳入json字元串和需要轉化為的class,然後看看裡面的方法是怎麼處理的,之前還有很多預處理的方法,直接跳過吧,主要看看裡面的解析的。先用createUsingDefault(DeserializationContext ctxt)傳回一個使用預設構造方法建立的對象。

json反射java對象_Jackson通過反射将Json轉化為java對象
json反射java對象_Jackson通過反射将Json轉化為java對象

這裡對于json的處理都放在JsonParser中,這裡擷取相應的類中的變量,然後使用deserializeAndSet方法設定值,現在覺得反射真是一個好東西呀,不然都不好處理,尤其是不知道都是什麼類對象的情況,當然這裡隻是簡單類對象的情況,複雜的後續再看看。

json反射java對象_Jackson通過反射将Json轉化為java對象

這裡最後調用的_setter.invoke(instance, value)來設定變量值。

後續還會有一些檢查,未完待續!