下划线无法匹配驼峰
json内容:
{ "code": 200, "msg": "success", "data": { "title": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "content": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "answer": "蜻蜓", "type": "ertongmiyu", "time": "2020-04-10 17:51:49", "type_name": { "type": "ertongmiyu", "name": "儿童谜语", "desc": "儿童谜语是指适合儿童青少年的谜语,这类谜语一般和动物,植物等知识有关系,帮助儿童青少年丰富知识。儿童谜语一般不涉及成人内容。" } }, "time": 1670310176, "log_id": 458647883248488448 }
实体类内容:
public record RiddleRandomResponse(@JSONField(name = "code") Integer code, @JSONField(name = "msg") String msg, @JSONField(name = "data") DataDTO data, @JSONField(name = "time") Integer time, @JSONField(name = "log_id") @JsonProperty(value = "log_id") Long logId) {
public record DataDTO(@JSONField(name = "title") String title, @JSONField(name = "content") String content,
@JSONField(name = "answer") String answer, @JSONField(name = "type") String type,
@JSONField(name = "time") String time, @JSONField(name = "type_name")@JsonProperty(value = "type_name") TypeNameDTO typeName) {
}
public record TypeNameDTO(@JSONField(name = "type") String type, @JSONField(name = "name") String name,
@JSONField(name = "desc") String desc) {
}
}
测试代码:
public static void main(String[] args) { String json = """ { "code": 200, "msg": "success", "data": { "title": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "content": "眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物)", "answer": "蜻蜓", "type": "ertongmiyu", "time": "2020-04-10 17:51:49", "type_name": { "type": "ertongmiyu", "name": "儿童谜语", "desc": "儿童谜语是指适合儿童青少年的谜语,这类谜语一般和动物,植物等知识有关系,帮助儿童青少年丰富知识。儿童谜语一般不涉及成人内容。" } }, "time": 1670310176, "log_id": 458647883248488448 } """; RiddleRandomResponse riddleRandomResponse = JSON.parseObject(json, RiddleRandomResponse.class, JSONReader.Feature.SupportSmartMatch); System.out.println(riddleRandomResponse); }
输出内容:
RiddleRandomResponse[code=200, msg=success, data=DataDTO[title=眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物), content=眼如铜铃,身象铁钉,有翅无毛,有脚难行。(猜一动物), answer=蜻蜓, type=ertongmiyu, time=2020-04-10 17:51:49, typeName=null], time=1670310176, logId=null]
原提问者GitHub用户SLiGe
问题已经修复,请用最新快照版本2.0.21-SNAPSHOT版本帮忙验证 https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.21-SNAPSHOT/
原回答者GitHub用户wenshao
在 Fastjson 2.x 版本中,默认情况下是不支持下划线(“_”)和驼峰式命名的自动匹配的。这是由于 Fastjson 2.x 的命名策略发生了改变,它采用了新的命名规则,使用了更严格的名称匹配方法。
如果需要在 Fastjson 2.x 中支持下划线和驼峰式命名的自动匹配,可以通过设置 JSONField 的 name 属性来实现。例如:
public class User { @JSONField(name="user_id") private String userId;
@JSONField(name="user_name")
private String userName;
// getters and setters
} 在上面的代码中,我们通过设置 @JSONField 注解的 name 属性来指定属性与 JSON 中的名称的对应关系。通过这种方式,就可以在 Fastjson 2.x 中实现下划线和驼峰式命名的自动匹配。
需要注意的是,虽然这种方式可以在 Fastjson 2.x 中支持下划线和驼峰式命名的自动匹配,但是它会增加代码的复杂度。因此,在实际开发中,应该根据实际需求来选择适合自己的命名规则,并尽量避免在同一个项目中使用多种命名方式。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。