写程序时,借助fastjson,将map对象转为json字符串,然后再通过json字符串转为对应的java对象
Map<String, Object> map = value.asMap();
String jsonString = JSON.toJSONString(map);
System.out.println(jsonString);
UserRealtion userRealtion = JSON.parseObject(jsonString, UserRealtion.class);
map转的json字符串如下
{"_type":"User","name":"lisi","_id":0,"id":1,"invite":[{"_type":"User","name":"wangwu","_id":77,"id":4,"invite":[{"_type":"User","name":"laoren","_id":43,"id":6}]},
转为java对象后,打印内容如下:
UserRealtion(id=0, name=lisi, invite=[UserRealtion(id=77, name=wangwu, invite=[UserRealtion(id=43, name=laoren, invite=null)]), UserRealtion(id=23, name=zhaosi, invite=null)])
从输出看到,json字符串的_id转为了java对象属性的id,这不是想要的结果。于是,修改java对象,使用了@JSONField(alternateNames = {"id"})属性
package com.qfedu.microuser.user.service;
import lombok.Data;
import java.util.List;
/**
* @Classname UserRealtion
* @Description TODO
* @Date 2025-07-29 16:00
* @Created by 老任与码
*/
@Data
public class UserRealtion {
// 父节点
// @JSONField(name = "_id", alternateNames = {"id"})
@JSONField(alternateNames = {"id"}) //不行
private Integer id;
private String name;
// 子节点
List<UserRealtion> invite;
}
结果转换后,结果还是不对,上网查了资料,当一个json存在id 和_id 的时候,使用JSONObject.parseObject进行序列号操作,映射错误_jsonobject.parseobject映射不上去-优快云博客
这篇文章中也提到了这个问题,于是使用 @JSONField(name = "_id", alternateNames = {"id"})注解
package com.qfedu.microuser.user.service;
import lombok.Data;
import java.util.List;
/**
* @Classname UserRealtion
* @Description TODO
* @Date 2025-07-29 16:00
* @Created by 老任与码
*/
@Data
public class UserRealtion {
// 父节点
@JSONField(name = "_id", alternateNames = {"id"})
private Integer id;
private String name;
// 子节点
List<UserRealtion> invite;
}
转换后结果如下
UserRealtion(id=1, name=lisi, invite=[UserRealtion(id=4, name=wangwu, invite=[UserRealtion(id=6, name=laoren, invite=null)]), UserRealtion(id=5, name=zhaosi, invite=null)])
可以看到,结果正确。
但是不太明白为什么name和alternateNames要一起指定,哪位大佬知道原因,还请告知一下。
608

被折叠的 条评论
为什么被折叠?



