Json字串與Java物件的相互轉換
阿新 • • 發佈:2021-08-04
JavaObject轉Json字串
-
fastJson
String jsonStr = JSONObject.toJSONString(obj);
-
gson
Gson gson = new Gson(); String toJson = gson.toJson(obj);
Json字串轉JavaObject
-
fastJson
String jsonStr="{\"content\":\"test\",\"id\":1,\"innerEntities\":[{\"name\":\"0\",\"startTime\":1628067696095},{\"name\":\"1\",\"startTime\":1628067696095},{\"name\":\"2\",\"startTime\":1628067696095}],\"spuId\":1}"; Entity entity = JSON.parseObject(jsonStr, Entity.class);
如果要將javaObject的屬性名是以駝峰命名如:startTime,而json是以形如:start_time的話則無法給javaObject注入對應的值。
解決方法:
在javaObject對應的欄位屬性新增@JSONField(name = "start_time")即可完成相應的對映。
-
gson
Gson gson = new Gson(); String jsonStr="{\"content\":\"test\",\"id\":1,\"innerEntities\":[{\"name\":\"0\",\"startTime\":1628067696095},{\"name\":\"1\",\"startTime\":1628067696095},{\"name\":\"2\",\"startTime\":1628067696095}],\"spuId\":1}"; Entity entity = gson.fromJson(jsonStr, Entity.class);
上述駝峰命名的轉換問題,gson的解決方式如下:
//在new Gson()時,使用工廠模式構建,設定對應的對映關係即可 Gson gson = new Gson() .newBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .create();
使用gson轉換時,還會出現一個問題,就是解析時間戳時會報錯,解決方式是:
//官網上說,在處理日期型別的時候經常出現內建轉換器無法轉換成功的情況,需要我們自己去定義一個轉換器去進行轉換,然後也告知了我們如何去定義自己的轉換器,如下程式碼以Date型別示例: // 建立gson物件構建器 GsonBuilder gsonBuilder = new GsonBuilder(); // 實現將long 型別的日期格式轉換為國際標準格式 gsonBuilder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return new Date(json.getAsJsonPrimitive().getAsLong()); } }); // 建立gson物件 Gson gson = gsonBuilder.create();
參考以上的程式碼,也可以完成對應其他型別的欄位自定義轉換器。