Java对象转JSON时---如何动态添加字段呢?

麦迪 Java经验 发布时间:2023-12-17 21:55:13 阅读数:6255 1
下文笔者讲述java代码将对象转JSON后,添加字段的方法分享,如下所示
json动态添加字段的实现思路:
    方式1:
     对象中添加一个map 
    为map添加元素,即可实现动态添加json字段
   方式2:
        对象转换为JSON之
         然后操作json字符串
例:
User类:
@Data
public class User {
	private String name;
	private Integer age;
}
 
序列化成JSON时,处理动态增加一个sex字段

{
	"name": "maomao",
	"age": 19,
	"sex": "nv"
}

方法一

使用@JsonAnyGetter注解进行扩展User的自定义属性
改造User类:
@Data
public class User {
	private String name;
	private Integer age;
	private Map<String, String> otherAttributes = new HashMap<>();

    // 利用JsonAnyGetter可以进行序列化时,将不包含在Java类属性中的其他属性添加到JSON字符串中
    @JsonAnyGetter
	public Map<String, String> getOtherAttributes() {
		return this.otherAttributes;
	}

	// 利用JsonAnySetter可以进行反序列化时,将不包含在Java类属性中的其他属性放到map里面
    @JsonAnySetter
	public void setOtherAttribute(String key, String value) {
		this.otherAttributes.put(key, value);
	}
	
}
 
示例
User user = new User();
user.setName("猫猫");
user.setAge(18);
user.setOtherAttribute("sex", "女");

ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(user);
System.out.println(jsonStr);
方法二
使用ObjectNode类动态增加JSON属性
User user = new User();
user.setName("猫猫");
user.setAge(18);

ObjectMapper objectMapper = new ObjectMapper();
ObjectNode jsonNodes = objectMapper.valueToTree(user);
jsonNodes.put("sex", "女");

String jsonStr = objectMapper.writeValueAsString(user);
System.out.println(jsonStr);
 

两种操作方式的区别

方法一:
    需要修改原始DTO类,但是可以增加反序列时获取额外信息的功能
方法二:
   无需修改原始DTO类,但是功能仅限于序列化时的动态修改
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202312/17028213597476.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者