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;

/**
 * 测试用户类
 *
 * @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);
    }

java实体类转json,学习,java,json,开发语言
注意,如果没有使用“@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);

运行结果如下:

java实体类转json,学习,java,json,开发语言
可以看到,直接使用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);

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:
java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

2、基于com.alibaba.fastjson.JSONObject

JSONObject是JSON的子类,并且没有重写“toJSONString”方法,所以效果是一样的。
java实体类转json,学习,java,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("=================================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================================");

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言
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);

运行结果如下:

java实体类转json,学习,java,json,开发语言
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);

运行结果如下:

java实体类转json,学习,java,json,开发语言
可以看到没有显示初始化的字段都保留下来了,并且值都为“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);

运行结果如下:

java实体类转json,学习,java,json,开发语言
可以看到时间已经转换为目标格式。

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

三、将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);

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:

java实体类转json,学习,java,json,开发语言

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

运行结果如下:
java实体类转json,学习,java,json,开发语言
可以看到时间戳转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);

再次运行:

java实体类转json,学习,java,json,开发语言文章来源地址https://www.toymoban.com/news/detail-657812.html

到了这里,关于Java实体和JSON之间的相互转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Json对象和Json字符串之间相互转换

    作为前端开发,在和后端进行联调接口时,总会遇到要求传JSON字符串或是JSON对象,或者是返回值里是JSON字符串要在页面上展示JSON对象这种情况,都需要前端开发人员对Json对象和Json对象进行相互转换,得到想要的结果。 废话不多说,直接上干货: 1.首先定义一个Json对象:

    2024年02月11日
    浏览(43)
  • java对象与Json字符串的相互转换

    文章目录 1.Json对象转换为java 对象 2. Java对象转换JSON 1.Json对象转换为java 对象 导入jackson的相关jar包 创建Jackson核心对象 ObjectMapper 调用ObjectMapper的相关方法进行转换 2. Java对象转换JSON 常见的解析器:Jsonlib,Gson,fastjson,jackson 1.导入jackson的相关jar包 2.创建Jackson核心对象 Obj

    2024年02月09日
    浏览(43)
  • Java 解析多层嵌套json数据及json字符串与对象的相互转换

    本文主要介绍java解析多层嵌套json数据以及字符串与JSON对象之间的相互转换,包括:json字符串的取值,json对象与字符串的相互转换,字符串转化为java对象,字符串转化为javaList列表等。 提示:以下是本篇文章正文内容,下面案例可供参考 数据格式:JSON实际上就是键值对(

    2024年02月04日
    浏览(47)
  • Java入门-java对象与json之间的转换

    使用jackson实现java对象转为Json字符串 引入依赖 对象转json字符串 测试 使用Jackson对象完成转换工作。 json字符串转换对象 测试

    2024年02月22日
    浏览(37)
  • 【mybatis-plus实体类复杂对象字段json自动相互转换,以及自定义字段类型解析器】

    引言: mybatis-plus集合对象字段json如何自动进行相互的转换? 怎样在使用mybatis-plus操作数据表的时候自动对实体类属性进行自动解析? 我们平时在做开发的时候,会遇到一个字段保存json串的情况。一般情况下mybatis-plus在做插入/更新之前将对象手动转换成json串,查询要用的时

    2023年04月13日
    浏览(89)
  • IDEA插件系列(6):GsonFormatPlus插件——JSON字符串转换Java实体类

    GsonFormatPlus JSON字符串与Java实体类的相互转换。 第一种安装方式是使用IDEA下载插件进行安装 第二种安装方式是使用离线插件进行安装 插件下载地址:https://plugins.jetbrains.com/plugin/7654-gsonformat/ 3. 使用方法 先在项目的默认包目录下创建一个空的类 右键-生成(Alt+insert) 选中G

    2024年02月12日
    浏览(36)
  • Java中的List<T>对象与Json格式的字符串的相互转换

    在这里我随便举一个例子 OK,以上就是互相转换的过程 我使用的场景是在订单的订单列表项这里,涉及到数据库相应字段数据的存放与提取,我的做法是,将List转换为Json格式字符串存入,取时再将Json格式转为List

    2024年02月15日
    浏览(37)
  • golang学习-golang结构体和Json相互转换

    1、结构体转为json对象     v, _ := json.Marshal(student)     jsonStr := string(v) // 结构体转为json对象 2、json字符串转为结构体     var s1 Student     err := json.Unmarshal([]byte(str), s1) //json 字符串转为结构体    3、结构体标签 表示的是转换为json对象时,ID字段变为id,Name字段变为name. type

    2024年01月23日
    浏览(44)
  • Java中实体与Map的相互转换

    一、在Java中,可以通过以下方法将实体类转换为Map: 利用Java反射机制: 利用Java 8 Stream API: 以上两种方法都可以将实体类转换为Map。需要注意的是,这些方法仅会将实体类中的属性转换为Map中的键值对,不会包含方法、构造器、父类属性等其他部分。 二、要将map转换为实

    2024年02月05日
    浏览(33)
  • Java-json相关转换,JSONObject与实体类/map互转、List/List<map>和JSONArray互转、获取JSONObject中的key value、字符串String转换等

    博客背景是Java开发。json相关的转换、取值等在日常开发中经常使用,但有时候还是会忘记or遇到些奇奇怪怪的问题。以此记录,提醒自己~不定期更新~ 实体类和JSONObject互转 Map和JSONObject互转 String转JSONObject 实体类转JSON字符串时不过滤NULL空值 获取JSONObject中的key value List和

    2024年02月12日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包