首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在POJO中将JSON key从camelCase改为蛇形大小写?

在Java中,POJO(Plain Old Java Object)通常用于表示数据结构,并且经常与JSON数据交互。默认情况下,许多JSON库(如Jackson或Gson)在将JSON数据反序列化为Java对象时,会期望JSON的key使用camelCase命名约定。然而,有时你可能需要将JSON的key从camelCase转换为蛇形大小写(snake_case)。以下是如何实现这一转换的方法:

使用Jackson库

如果你使用的是Jackson库,可以通过配置ObjectMapper来实现key的命名策略转换。

代码语言:txt
复制
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;

public class JsonKeyConversionExample {

    public static void main(String[] args) throws Exception {
        String json = "{\"firstName\":\"John\", \"lastName\":\"Doe\"}";

        ObjectMapper mapper = new ObjectMapper();
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);

        Person person = mapper.readValue(json, Person.class);
        System.out.println(person.getFirstName()); // 输出: John
        System.out.println(person.getLastName());  // 输出: Doe
    }
}

class Person {
    private String first_name;
    private String last_name;

    public String getFirstName() {
        return first_name;
    }

    public void setFirstName(String first_name) {
        this.first_name = first_name;
    }

    public String getLastName() {
        return last_name;
    }

    public void setLastName(String last_name) {
        this.last_name = last_name;
    }
}

使用Gson库

如果你使用的是Gson库,可以通过自定义TypeAdapter来实现key的命名策略转换。

代码语言:txt
复制
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

import java.io.IOException;

public class JsonKeyConversionExample {

    public static void main(String[] args) {
        String json = "{\"firstName\":\"John\", \"lastName\":\"Doe\"}";

        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Person.class, new PersonTypeAdapter())
                .create();

        Person person = gson.fromJson(json, Person.class);
        System.out.println(person.getFirstName()); // 输出: John
        System.out.println(person.getLastName());  // 输出: Doe
    }
}

class Person {
    private String first_name;
    private String last_name;

    public String getFirstName() {
        return first_name;
    }

    public void setFirstName(String first_name) {
        this.first_name = first_name;
    }

    public String getLastName() {
        return last_name;
    }

    public void setLastName(String last_name) {
        this.last_name = last_name;
    }
}

class PersonTypeAdapter extends TypeAdapter<Person> {

    @Override
    public void write(JsonWriter out, Person value) throws IOException {
        // 这里可以实现将Person对象转换为JSON的逻辑,如果需要的话
    }

    @Override
    public Person read(JsonReader in) throws IOException {
        Person person = new Person();
        in.beginObject();
        while (in.hasNext()) {
            String name = in.nextName();
            switch (name) {
                case "first_name":
                    person.setFirstName(in.nextString());
                    break;
                case "last_name":
                    person.setLastName(in.nextString());
                    break;
                default:
                    in.skipValue();
                    break;
            }
        }
        in.endObject();
        return person;
    }
}

原因与优势

原因

  • 不同的系统或API可能使用不同的命名约定,例如camelCase和snake_case。
  • 为了保持代码的一致性和可读性,可能需要将JSON的key转换为特定的命名约定。

优势

  • 一致性:确保数据在不同系统之间的一致性。
  • 可读性:提高代码的可读性和维护性。
  • 兼容性:使代码能够与使用不同命名约定的外部系统兼容。

应用场景

  • 当你需要与使用snake_case命名约定的API进行交互时。
  • 当你希望将JSON数据反序列化为Java对象,并且希望字段名使用snake_case时。
  • 当你需要将Java对象序列化为JSON,并且希望字段名使用snake_case时。

解决问题的步骤

  1. 选择合适的库:根据你的项目需求选择合适的JSON处理库,如Jackson或Gson。
  2. 配置命名策略:对于Jackson,使用PropertyNamingStrategy.SNAKE_CASE;对于Gson,自定义TypeAdapter来处理命名转换。
  3. 实现转换逻辑:根据选择的库,实现相应的转换逻辑。
  4. 测试和验证:确保转换后的数据符合预期,并且没有引入新的问题。

通过以上步骤,你可以轻松地在POJO中将JSON key从camelCase转换为蛇形大小写。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Newtonsoft.Json 迁移到 System.Text.Json

3.大小写 默认情况下两者序列化都是 Pascal 命名,及首字母大写,在 JavaScript 以及 Java 等语言中默认是使用驼峰命名,所以在实际业务中是离不开使用驼峰的。...4.带引号数字 在标准 Json 里,数字类型是不带引号的,:{"Name":"xiaoshi","Age":18},但有时我们可能会遇到不标准的异类,Newtonsoft.Json 默认是支持直接反序列化为数字类型的...详细说明:如何在 System.Text.Json 中使用 JSON DOM、Utf8JsonReader 和 Utf8JsonWriter 6.JsonConstructor 通过 JsonConstructor...JsonConvert.PopulateObject 方法 ⚠️ ⚠ ObjectCreationHandling 全局设置 ⚠️ ⚠ 在不带 setter 的情况下添加到集合 ⚠️ ⚠ 对属性名称采用蛇形命名法...参考资料 Newtonsoft.Json 迁移到 System.Text.Json .NET性能系列文章二:Newtonsoft.Json vs.

2.3K40

盘点 IDEA2020.3 那些炫酷的插件,超级好用的那种

9、转换大小写CamelCase 或 UpperLowerCapitalize 推荐指数:☆☆☆☆☆ 推荐理由:快捷转换格式:大小写 驼峰,下划线 中划线 等等!...自动识别pojo字段的注释,并添加为sql注释。 11、控制台日志 高亮 Grep Console 推荐指数:☆☆☆☆☆ 推荐理由:没什么好说的, 基本是必备!...阿里代码规约检测 p3c (github 地址:https://github.com/alibaba/p3c/blob/master/idea-plugin/README_cn.md) 快捷键提示工具:Key...Lombok 代码生成工具:CodeMaker 单元测试测试生成工具:JUnitGenerator Mybatis 工具:Free Mybatis plugin Maven辅助神器:Maven Helper JSON...转领域对象工具:GsonFormat 领域对象转JSON工具:POJO to JSON 时序图生成工具:SequenceDiagram 字符串工具:String Manipulation 代码作色工具:

91220
  • 汇总一下 Intellij IDEA 的炫酷插件

    9、转换大小写CamelCase 或 UpperLowerCapitalize 推荐指数:☆☆☆☆☆ 推荐理由:快捷转换格式:大小写 驼峰,下划线 中划线 等等!...自动识别pojo字段的注释,并添加为sql注释。 ? ? 11、控制台日志 高亮 Grep Console 推荐指数:☆☆☆☆☆ 推荐理由:没什么好说的, 基本是必备! ? ?...阿里代码规约检测 p3c (github 地址:https://github.com/alibaba/p3c/blob/master/idea-plugin/README_cn.md) 快捷键提示工具:Key...Lombok 代码生成工具:CodeMaker 单元测试测试生成工具:JUnitGenerator Mybatis 工具:Free Mybatis plugin Maven辅助神器:Maven Helper JSON...转领域对象工具:GsonFormat 领域对象转JSON工具:POJO to JSON 时序图生成工具:SequenceDiagram 字符串工具:String Manipulation 代码作色工具:

    1.6K20

    Intellij IDEA常用的牛逼插件的总结

    9、转换大小写CamelCase 或 UpperLowerCapitalize 推荐指数:☆☆☆☆☆ 推荐理由:快捷转换格式:大小写 驼峰,下划线 中划线 等等!...自动识别pojo字段的注释,并添加为sql注释。 11、控制台日志 高亮 Grep Console 推荐指数:☆☆☆☆☆ 推荐理由:没什么好说的, 基本是必备!...阿里代码规约检测 p3c (github 地址:https://github.com/alibaba/p3c/blob/master/idea-plugin/README_cn.md) 快捷键提示工具:Key...Lombok 代码生成工具:CodeMaker 单元测试测试生成工具:JUnitGenerator Mybatis 工具:Free Mybatis plugin Maven辅助神器:Maven Helper JSON...转领域对象工具:GsonFormat 领域对象转JSON工具:POJO to JSON 时序图生成工具:SequenceDiagram 字符串工具:String Manipulation 代码作色工具:

    1.4K20

    Gorm 数据库表迁移与表模型定义

    gorm.DeletedAt `gorm:"index"` } 您可以将它嵌入到您的结构体中,以包含这几个字段,详情请参考 嵌入结构体 四、表模型主键、表名、列名的约定 4.1 主键(Primary Key..., "jinzhu").Delete(&User{}) // DELETE FROM deleted_users WHERE name = 'jinzhu'; 查看 from 子查询 了解如何在 FROM...AuthorEmail string Upvotes int32 } 5.4 结构体标签(tags) 声明 model 时,tag 是可选的,GORM 支持以下 tag: tag 名大小写不敏感...,但建议使用 camelCase 风格,Gorm支持以下标记: 标签名 说明 column 指定 db 列名 type 列数据类型,推荐使用兼容性好的通用类型,例如:所有数据库都支持 bool、int、...,: serializer:json/gob/unixtime size 指定列数据大小/长度, : size:256 primaryKey 指定列作为主键 unique 指定列作为unique default

    36110

    Go结构体标签

    键值对之间使用一个空格分隔,具体的格式如下:`key1:"value1" key2:"value2" key3:"value3"...` // 键值对用空格分隔key会指定反射的解析方式包含 json...默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间。...GORM 默认定义一个 gorm.Model 结构体,其包括字段 ID、CreatedAt、UpdatedAt、DeletedAt,可以嵌套入自建结构体,tag名大小写不敏感,建议使用camelCase...如果想要保存 UNIX(毫/纳)秒时间戳,而不是 time,只需简单地将 time.Time 修改为 int 即可。...在使用指定数据库数据类型时,它需要是完整的数据库数据类型,:MEDIUMINT UNSIGNED not NULL AUTO_INCREMENTsize指定列大小,例如:size:256primaryKey

    1.2K31

    Gorm框架学习--入门

    默认情况下,GORM 使用 ID 作为主键,使用结构体名的 蛇形复数 作为表名,字段名的 蛇形 作为列名,并使用 CreatedAt、UpdatedAt 字段追踪创建、更新时间 遵循 GORM 已有的约定...,但建议使用 camelCase 风格 golang中的tag类似java中注解的作用 标签名 说明 column 指定 db 列名 type 列数据类型,推荐使用兼容性好的通用类型,例如:所有数据库都支持...在使用指定数据库数据类型时,它需要是完整的数据库数据类型,:MEDIUMINT UNSIGNED not NULL AUTO_INCREMENT serializer specifies serializer...for how to serialize and deserialize data into db, e.g: serializer:json/gob/unixtime size specifies...column data size/length, e.g: size:256 primaryKey specifies column as primary key unique specifies column

    2.1K10

    10 个解放双手的 IDEA插件,少些冤枉代码(第三弹)

    以往的两篇IDEA插件分享:10个 解放双手的 IDEA 插件,少些冤枉代码10个解放双手的 IDEA 插件,这些代码真不用手写(第二弹)1、POJO to JSON开发工作中,常常在设计完API后,会使用...不过,在某些情况下,我们需要将已有实体类转换为JSON格式数据,那我通常不得不依赖于手动执行单元测试或在main方法中,使用JSON处理库(例如fastjson等)来实现对象到JSON字符串的转换,是一件比较麻烦的事情...使用POJO to JSON插件就让这件事容易的多,只要在实体类名上右键执行MakeJson,即可生成该类对应的JSON数据,而且它支持多层级的对象。...public static final String aaaBaa = "aaaBaa";为了更加规范些,我们要将变量名改为大写字母下划线分割的格式。...使用CamelCase可以在 kebab-case,SNAKE_CASE,PascalCase,camelCase,snake_case 和 空格风格之间切换。

    2.7K10

    HandlerMethodArgumentResolver(四):自定参数解析器处理特定应用场景,介绍PropertyNamingStrategy的使用【享学Spring MVC】

    默认情况下字符串反序列为一个Java对象,要求需要完全一样才能反序列赋值成功。...若使用另外三种,我把结果摘录如下: CamelCase: 序列化vo对象到json -> {"demoAge":18,"demoName":"fsx","demoNameAndAge":"fsx18"}...":"fsx18"} 反序列化json到vo -> Main.DemoVo(demoName=fsx, demoAge=18, demoNameAndAge=fsx18) FastJson默认使用CamelCase...:.net命名都是大写开头形如DemoName表示属性名 :js/python喜欢用下划线形全小写demo_name表示属性名 ---- ---- 场景二: 在微服务场景中有个特别常见的现象...:跟第三方服务做对接时(python老系统),你不乏会遇到如下两个痛点: 对方系统是以下划线形式命名的(和Java命名规范相悖) 对方系统的参数json串层次较深,而对你有用的仅仅是深处的一小部分 例如这个参数串

    11.2K73

    精心整理了100+Python字符串常用操作,收藏备用!

    如何连接 str 和 int 对象 仅在 Python 中将字符串拆分为两部分 将大写字符串转换为句子大小写 在标点符号上拆分字符串 在 Python 中比较字符串 用零填充数字字符串 找到两个字符串之间的差异位置...在 Python 中使用 string.replace() 在 Python 中获取字符的位置 Python字符串替换多次出现 在索引后找到第一次出现的字符 在 Python 中将字符串更改为大写 在...Python 中获取字符串的大小 Python中的字符串比较 is vs == 每当数字与非数字相邻时,Python 正则表达式都会添加空格 在 Python 中仅按第一个空格拆分字符串 在Python中将字符串中的一些小写字母更改为大写...string' x = string.find('+', 4) print(x) x = string.find('+', 10) print(x) Output: 5 10 在 Python 中将字符串更改为大写...canada japan australia' l = s.split(' ', 1) print(l) Output: ['canada', 'japan australia'] 在Python中将字符串中的一些小写字母更改为大写

    14.5K20
    领券