Java将json中key值下划线转为驼峰格式

196 篇文章 21 订阅
本文介绍了在Java开发中,如何将json中的key值从下划线格式转换为驼峰格式的需求,并提供了一个简单的Java工具类转换实现,包括代码示例和运行结果。此外,还讨论了将json转换为对应Java实体类的问题。
摘要由CSDN通过智能技术生成


想学习架构师构建流程请跳转:Java架构师系统架构设计
在这里插入图片描述

1 需求说明

在开发过程中,有时会遇到json不是严格按照驼峰命名,需要将其中带有下划线的字段进行格式化转换为驼峰命名。

如果是对JSON格式里的返回字段清楚的情况下,可以进行逐层解析转换。

但是,效率比较低,而且JSON里可能会循环嵌套多层JSONObject或JSONArray。

如何使用通用的方式进行转换?

在这里插入图片描述

2 Java工具类转换实现

比较笨的方法,使用工具类进行转化对应的格式

2.1 代码


                
Java中,将JSON字符串换为对象通常会使用一些流行的库,例如Jackson或Gson。要实现忽略大小写,并将下划线命名的键换为驼峰命名的字段,可以通过自定义反序列化来实现。 以Jackson为例,可以按照以下步骤进行: 1. 创建一个自定义的反序列化器,继承`JsonDeserializer`类,并重写`deserialize`方法。在这个方法中,可以编写逻辑来处理JSON键的换。 2. 使用`@JsonNaming`注解来指定字段命名策略,或者在反序列化器中手动调整键名。 3. 在反序列化时使用`ObjectMapper`类,并配置上面创建的反序列化器。 下面是一个简单的示例代码: ```java import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonNaming; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.module.SimpleModule; import java.util.HashMap; import java.util.Map; class SnakeToCamelDeserializer extends StdDeserializer<Map<String, Object>> { public SnakeToCamelDeserializer() { this(null); } public SnakeToCamelDeserializer(Class<?> vc) { super(vc); } @Override public Map<String, Object> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { Map<String, Object> map = new HashMap<>(); JsonNode node = p.readValueAsTree(); node.fields().forEachRemaining(entry -> { String key = entry.getKey(); String camelCaseKey = key.replaceAll("([A-Z])", "_$1").toLowerCase(); map.put(camelCaseKey, entry.getValue()); }); return map; } } public class JsonToJavaObject { public static void main(String[] args) throws JsonProcessingException { String json = "{\"first_name\": \"John\", \"last_name\": \"Doe\"}"; ObjectMapper objectMapper = new ObjectMapper(); SimpleModule module = new SimpleModule(); module.addDeserializer(Map.class, new SnakeToCamelDeserializer()); objectMapper.registerModule(module); Map<String, Object> result = objectMapper.readValue(json, Map.class); System.out.println(result); } } ``` 在这个示例中,我们创建了一个名为`SnakeToCamelDeserializer`的自定义反序列化器,它会将JSON中的下划线命名换为驼峰命名。然后我们在`JsonToJavaObject`类的`main`方法中创建了一个`ObjectMapper`实例,并注册了我们的自定义反序列化器。最后,我们使用`readValue`方法将JSON字符串换为`Map`对象。 请注意,这个示例演示了如何将JSON字符串换为`Map`,如果您需要换为特定的Java类,还需要在类中使用相应的注解或编写相应的反序列化逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵广陆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值