一、先寫一個測試用的Java實體
代碼如下:
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 測試用戶類
*
* @author:gan
* @date: 2023-04-28 15:33
*/
@Data
public class User {
private String name;
private Integer age;
private Date birthday;
private char sex;
private Float height;
private Double weight;
private BigDecimal money;
private Boolean adult;
//下面這些初始化為空,用于后面測試效果時用
private String nameDesc;
private Integer ageDesc;
private Date birthdayDesc;
private char sexDesc;
private Float heightDesc;
private Double weightDesc;
private BigDecimal moneyDesc;
private Boolean adultDesc;
public User() {
}
public User(String name, Integer age, Date birthday, char sex, Float height, Double weight, BigDecimal money, Boolean adult) {
this.name = name;
this.age = age;
this.birthday = birthday;
this.sex = sex;
this.height = height;
this.weight = weight;
this.money = money;
this.adult = adult;
}
}
初始化并輸出一下:
public static void main(String[] args) {
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
}
注意,如果沒有使用“@Data”注解,一定要加上get和set方法,不然轉(zhuǎn)化之后的Json是空的!
二、將Java實體轉(zhuǎn)化為Json
1、基于com.alibaba.fastjson.JSON
主要是對SerializerFeature枚舉類的使用,詳細的可以看這個博客:
https://blog.csdn.net/xiang__liu/article/details/81570923
或者看這里:
https://www.javadoc.io/static/com.alibaba/fastjson/1.2.2/com/alibaba/fastjson/serializer/SerializerFeature.html#BeanToArray
下面是對SerializerFeature的使用演示:
(1)、JSON.toJSONString(user),會丟掉值為空的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
運行結(jié)果如下:
可以看到,直接使用toJSONString將Java實體轉(zhuǎn)化為Json,會把沒有顯示初始化的字段丟掉。
“\u0000”是char類型的默認值,相對于null。
(2)、JSON.toJSONString(user, SerializerFeature.WriteMapNullValue),保留值為空的字段,并初始化為null。
加上“SerializerFeature.WriteMapNullValue”,會輸出值為空的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
運行結(jié)果如下:
(3)、JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString),會將非空的字段值加上"",并丟掉沒有初始化的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
運行結(jié)果如下:
(4)、JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty),會將String類型的字段加上"",沒有顯示初始化的String類型參數(shù)保留,保留默認初始化為null的字段,同時丟掉其他未初始化的、非String類型的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonStr4:" + jsonStr4);
運行結(jié)果如下:
(5)、JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty),會非空、String類型的字段加上"",保留默認初始化為null的字段,同時丟掉其他未初始化的、非String類型的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonStr4:" + jsonStr4);
String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
System.out.println("jsonStr5:" + jsonStr5);
運行結(jié)果如下:
(6)、JSON.toJSONString(user, SerializerFeature.QuoteFieldNames),轉(zhuǎn)化之后的字段名會加上"",和默認一樣。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonStr4:" + jsonStr4);
String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
System.out.println("jsonStr5:" + jsonStr5);
String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
System.out.println("jsonStr6:" + jsonStr6);
運行結(jié)果如下:
(7)、JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat),轉(zhuǎn)化之后Date類型為傳入格式,默認是時間戳。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonStr4:" + jsonStr4);
String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
System.out.println("jsonStr5:" + jsonStr5);
String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
System.out.println("jsonStr6:" + jsonStr6);
String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
System.out.println("jsonStr7:" + jsonStr7);
運行結(jié)果如下:
(8)、JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero),轉(zhuǎn)化之后會將沒有初始化的數(shù)字類型(BigDecimal、Float、Double)字段初始化為0,保留初始化為null的字段,丟掉其他類型未顯示初始化的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonStr4:" + jsonStr4);
String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
System.out.println("jsonStr5:" + jsonStr5);
String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
System.out.println("jsonStr6:" + jsonStr6);
String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
System.out.println("jsonStr7:" + jsonStr7);
String jsonStr8 = JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
System.out.println("jsonStr8:" + jsonStr8);
運行結(jié)果如下:
(9)、JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse),轉(zhuǎn)化之后會將沒有初始化的Boolean類型字段初始化為false,保留初始化為null的字段,丟掉其他類型未顯示初始化的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonStr4:" + jsonStr4);
String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
System.out.println("jsonStr5:" + jsonStr5);
String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
System.out.println("jsonStr6:" + jsonStr6);
String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
System.out.println("jsonStr7:" + jsonStr7);
String jsonStr8 = JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
System.out.println("jsonStr8:" + jsonStr8);
String jsonStr9 = JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse);
System.out.println("jsonStr9:" + jsonStr9);
運行結(jié)果如下:
(10)、JSON.toJSONString(user, SerializerFeature.PrettyFormat),格式化Json,丟掉其他未顯示初始化的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSON.toJSONString start================================");
String jsonStr1 = JSON.toJSONString(user);
System.out.println("jsonStr1:" + jsonStr1);
String jsonStr2 = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonStr2:" + jsonStr2);
String jsonStr3 = JSON.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonStr3:" + jsonStr3);
String jsonStr4 = JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonStr4:" + jsonStr4);
String jsonStr5 = JSON.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
System.out.println("jsonStr5:" + jsonStr5);
String jsonStr6 = JSON.toJSONString(user, SerializerFeature.QuoteFieldNames);
System.out.println("jsonStr6:" + jsonStr6);
String jsonStr7 = JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
System.out.println("jsonStr7:" + jsonStr7);
String jsonStr8 = JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
System.out.println("jsonStr8:" + jsonStr8);
String jsonStr9 = JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse);
System.out.println("jsonStr9:" + jsonStr9);
String jsonStr10 = JSON.toJSONString(user, SerializerFeature.PrettyFormat);
System.out.println("jsonStr10:" + jsonStr10);
運行結(jié)果如下:
2、基于com.alibaba.fastjson.JSONObject
JSONObject是JSON的子類,并且沒有重寫“toJSONString”方法,所以效果是一樣的。
代碼如下:
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
System.out.println("=================================JSONObject.toJSONString start================================");
String jsonObjectStr1 = JSONObject.toJSONString(user);
System.out.println("jsonObjectStr1:" + jsonObjectStr1);
String jsonObjectStr2 = JSONObject.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println("jsonObjectStr2:" + jsonObjectStr2);
String jsonObjectStr3 = JSONObject.toJSONString(user, SerializerFeature.WriteNonStringValueAsString);
System.out.println("jsonObjectStr3:" + jsonObjectStr3);
String jsonObjectStr4 = JSONObject.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty);
System.out.println("jsonObjectStr4:" + jsonObjectStr4);
String jsonObjectStr5 = JSONObject.toJSONString(user, SerializerFeature.WriteNullListAsEmpty);
System.out.println("jsonObjectStr5:" + jsonObjectStr5);
String jsonObjectStr6 = JSONObject.toJSONString(user, SerializerFeature.QuoteFieldNames);
System.out.println("jsonObjectStr6:" + jsonObjectStr6);
String jsonObjectStr7 = JSONObject.toJSONString(user, SerializerFeature.WriteDateUseDateFormat);
System.out.println("jsonObjectStr7:" + jsonObjectStr7);
String jsonObjectStr8 = JSONObject.toJSONString(user, SerializerFeature.WriteNullNumberAsZero);
System.out.println("jsonObjectStr8:" + jsonObjectStr8);
String jsonObjectStr9 = JSONObject.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse);
System.out.println("jsonObjectStr9:" + jsonObjectStr9);
String jsonObjectStr10 = JSONObject.toJSONString(user, SerializerFeature.PrettyFormat);
System.out.println("jsonObjectStr10:" + jsonObjectStr10);
System.out.println("=================================JSONObject.toJSONString end================================");
3、基于com.fasterxml.jackson.databind.ObjectMapper的writeValueAsString方法
代碼如下:
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
ObjectMapper objectMapper = new ObjectMapper();
try {
String objectMapperStr = objectMapper.writeValueAsString(user);
System.out.println("objectMapperStr:" + objectMapperStr);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
運行結(jié)果如下:
writeValueAsString方法會保留沒有顯示初始化的的字段,除了char類型初始化值為“\u0000”,其他都為“null”。
4、基于com.google.gson.Gson的toJson方法。
(1)、直接實例化一個Gson,將Java實體傳入實例中的toJson,會丟掉沒有初始化的字段。
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
Gson gson = new Gson();
String gsonStr1 = gson.toJson(user);
System.out.println("gsonStr1:" + gsonStr1);
運行結(jié)果如下:
char類型還是保留下來了。
(2)、在轉(zhuǎn)化為json的同時,保留沒有顯示初始化的字段。
“Gson gson = new Gson();”只能簡單地將Java實體轉(zhuǎn)為json,要保留沒有顯示初始化的字段,需要用到“GsonBuilder”初始化“Gson”,代碼如下:
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
Gson gson = new GsonBuilder()
.serializeNulls()
.create();
String gsonStr1 = gson.toJson(user);
System.out.println("gsonStr1:" + gsonStr1);
運行結(jié)果如下:
可以看到?jīng)]有顯示初始化的字段都保留下來了,并且值都為“null”。
(3)、設置時間格式。
上面可以看到時間格式默認是國際化格式,想要轉(zhuǎn)換為“yyyy年MM月dd日 時:分:秒”怎么辦?可以使用“setDateFormat”格式化時間,代碼如下:
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
Gson gson = new GsonBuilder()
.serializeNulls()
.setDateFormat("yyyy年MM月dd日 HH:mm:ss")
.create();
String gsonStr1 = gson.toJson(user);
System.out.println("gsonStr1:" + gsonStr1);
運行結(jié)果如下:
可以看到時間已經(jīng)轉(zhuǎn)換為目標格式。
(4)、格式化輸出。
如果覺得轉(zhuǎn)換之后的json只有一行不好看,可以使用“setPrettyPrinting”格式化json的格式,代碼如下:
User user = new User("王宇", 25, DateUtil.parse("1998-10-12 13:25:22"), '男', 180.0f, 71.55, new BigDecimal("2104.5"), true);
System.out.println("toString方法:" + user);
Gson gson = new GsonBuilder()
.serializeNulls()
.setDateFormat("yyyy年MM月dd日 HH:mm:ss")
.setPrettyPrinting()
.create();
String gsonStr1 = gson.toJson(user);
System.out.println("gsonStr1:" + gsonStr1);
運行結(jié)果如下:
三、將Json轉(zhuǎn)換為Java實體
1、先拿到測試Json
拿到測試用的Java實體轉(zhuǎn)化為Json,格式化后如下:
{
"adult": true,
"adultDesc": null,
"age": 25,
"ageDesc": null,
"birthday": 908169922000,
"birthdayDesc": null,
"height": 180.0,
"heightDesc": null,
"money": 2104.5,
"moneyDesc": null,
"name": "王宇",
"nameDesc": null,
"sex": "男",
"sexDesc": "\u0000",
"weight": 71.55,
"weightDesc": null
}
2、基于com.alibaba.fastjson.JSON
使用JSON的parseObject(String text, Class clazz)方法可以直接將Json字符轉(zhuǎn)化為對應clazz的Java實體,代碼如下:
String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\(zhòng)",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
System.out.println("userJson:" + userJson);
User user = JSON.parseObject(userJson, User.class);
System.out.println("user:" + user);
運行結(jié)果如下:
3、基于com.alibaba.fastjson.JSONObject
JSONObject中轉(zhuǎn)化Java實體的方法parseObject也是來自JSON,并且沒有重寫,效果是一樣的,代碼如下:
String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\(zhòng)",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
System.out.println("userJson:" + userJson);
User user = JSONObject.parseObject(userJson, User.class);
System.out.println("user:" + user);
運行結(jié)果如下:
4、基于com.fasterxml.jackson.databind.ObjectMapper的readValue方法
需要先實例化ObjectMapper,再調(diào)用readValue方法,代碼如下:
String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\(zhòng)",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
System.out.println("userJson:" + userJson);
ObjectMapper objectMapper = new ObjectMapper();
try {
User user = objectMapper.readValue(userJson, User.class);
System.out.println("user:" + user);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
運行結(jié)果如下:
5、基于com.google.gson.Gson
Gson實例化后,使用fromJson方法將Json轉(zhuǎn)化為Java實體,代碼如下:
String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\(zhòng)",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
System.out.println("userJson:" + userJson);
Gson gson = new Gson();
User user = gson.fromJson(userJson, User.class);
System.out.println("user:" + user);
運行結(jié)果如下:
可以看到時間戳轉(zhuǎn)Date類型報錯了。
需要使用GsonBuilder進行實例化,在適配一下Date類型的字段。代碼如下:
String userJson = "{\"adult\":true,\"adultDesc\":null,\"age\":25,\"ageDesc\":null,\"birthday\":908169922000,\"birthdayDesc\":null,\"height\":180.0,\"heightDesc\":null,\"money\":2104.5,\"moneyDesc\":null,\"name\":\"王宇\",\"nameDesc\":null,\"sex\":\"男\(zhòng)",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";
System.out.println("userJson:" + userJson);
Gson gson = new GsonBuilder()
.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new Date(json.getAsJsonPrimitive().getAsLong());
}
})
.create();
User user = gson.fromJson(userJson, User.class);
System.out.println("user:" + user);
再次運行:文章來源:http://www.zghlxwxcb.cn/news/detail-657812.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-657812.html
到了這里,關(guān)于Java實體和JSON之間的相互轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!