我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java实体和JSON之间的相互转换

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java实体和JSON之间的相互转换

Java实体和JSON之间的相互转换

一、先写一个测试用的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;@Datapublic 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方法,不然转化之后的Json是空的!

二、将Java实体转化为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);

运行结果如下:

在这里插入图片描述
可以看到,直接使用toJSONString将Java实体转化为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);

运行结果如下:

在这里插入图片描述

(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);

运行结果如下:

在这里插入图片描述

(4)、JSON.toJSONString(user, SerializerFeature.WriteNullStringAsEmpty),会将String类型的字段加上"",没有显示初始化的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);

运行结果如下:

在这里插入图片描述

(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);

运行结果如下:
在这里插入图片描述

(6)、JSON.toJSONString(user, SerializerFeature.QuoteFieldNames),转化之后的字段名会加上"",和默认一样。

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);

运行结果如下:

在这里插入图片描述

(7)、JSON.toJSONString(user, SerializerFeature.WriteDateUseDateFormat),转化之后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);

运行结果如下:

在这里插入图片描述

(8)、JSON.toJSONString(user, SerializerFeature.WriteNullNumberAsZero),转化之后会将没有初始化的数字类型(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);

运行结果如下:

在这里插入图片描述

(9)、JSON.toJSONString(user, SerializerFeature.WriteNullBooleanAsFalse),转化之后会将没有初始化的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);

运行结果如下:

在这里插入图片描述

(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);

运行结果如下:

在这里插入图片描述

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();}

运行结果如下:

在这里插入图片描述
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);

运行结果如下:

在这里插入图片描述
char类型还是保留下来了。

(2)、在转化为json的同时,保留没有显示初始化的字段。

“Gson gson = new Gson();”只能简单地将Java实体转为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);

运行结果如下:

在这里插入图片描述
可以看到没有显示初始化的字段都保留下来了,并且值都为“null”。

(3)、设置时间格式。

上面可以看到时间格式默认是国际化格式,想要转换为“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);

运行结果如下:

在这里插入图片描述
可以看到时间已经转换为目标格式。

(4)、格式化输出。

如果觉得转换之后的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);

运行结果如下:

在这里插入图片描述

三、将Json转换为Java实体

1、先拿到测试Json

拿到测试用的Java实体转化为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字符转化为对应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\":\"男\",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";System.out.println("userJson:" + userJson);User user = JSON.parseObject(userJson, User.class);System.out.println("user:" + user);

运行结果如下:

在这里插入图片描述

3、基于com.alibaba.fastjson.JSONObject

JSONObject中转化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\":\"男\",\"sexDesc\":\"\\u0000\",\"weight\":71.55,\"weightDesc\":null}";System.out.println("userJson:" + userJson);User user = JSONObject.parseObject(userJson, User.class);System.out.println("user:" + user);

运行结果如下:

在这里插入图片描述

4、基于com.fasterxml.jackson.databind.ObjectMapper的readValue方法

需要先实例化ObjectMapper,再调用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\":\"男\",\"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();}

运行结果如下:

在这里插入图片描述

5、基于com.google.gson.Gson

Gson实例化后,使用fromJson方法将Json转化为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\":\"男\",\"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);

运行结果如下:
在这里插入图片描述
可以看到时间戳转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\":\"男\",\"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);

再次运行:

在这里插入图片描述

来源地址:https://blog.csdn.net/studio_1/article/details/130431009

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java实体和JSON之间的相互转换

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java对象与json对象之间互相转换实现方法示例

本文实例讲述了java对象与json对象之间互相转换实现方法。分享给大家供大家参考,具体如下:import java.util.ArrayList;import java.util.Collection;import java.util.I
2023-05-30

python3中bytes和string之间的互相转换

前言 Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分
2022-06-04

Java中Map与JSON数据之间的互相转化

我们在开发中难免和JSON打交道,这不小编最近遇到了,需要把一些信息转成JSON字符串,下面这篇文章主要给大家介绍了关于Java中Map与JSON数据之间的互相转化,需要的朋友可以参考下
2023-05-16

Android JSON数据与实体类之间的相互转化(GSON的用法)

这篇文章就是示范如何用GSON把JSON数据与实体类进行相互转化,需要用到gson-2.3.1.jar这个包。直接贴代码了:import java.lang.reflect.Type; import java.util.ArrayList;
2022-06-06

js怎么实现base64、url和blob之间相互转换

这篇文章主要讲解了“js怎么实现base64、url和blob之间相互转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js怎么实现base64、url和blob之间相互转换”吧!一般来说前
2023-07-06

Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等

博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 文章目录 1、JSONObject相关实体类和JSONObject互转Map和JS
2023-08-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录