V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  a1b2c3T  ›  全部回复第 21 页 / 共 48 页
回复总数  950
1 ... 17  18  19  20  21  22  23  24  25  26 ... 48  
在将 JSON 字符串转换为 Map 时,如果需要将 JSON 键的命名方式从驼峰命名法( Camel Case )转换为下划线命名法( Snake Case ),可以通过以下步骤实现:

方法一:手动转换
反序列化 JSON 字符串为 Map: 使用 Jackson 或 Gson 等库将 JSON 字符串反序列化为 Map 。
遍历 Map 并修改键名: 遍历 Map ,将每个键名从驼峰格式转换为下划线格式。
代码示例(使用 Jackson ):
java
复制代码
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.HashMap;
import java.util.Map;

public class CamelToSnake {
public static void main(String[] args) throws Exception {
String jsonString = "{\"userName\":\"JohnDoe\",\"userAge\":30}";

ObjectMapper objectMapper = new ObjectMapper();
// 反序列化 JSON 字符串为 Map
Map<String, Object> originalMap = objectMapper.readValue(jsonString, HashMap.class);

Map<String, Object> resultMap = new HashMap<>();

// 遍历 Map ,将驼峰转换为下划线格式
for (Map.Entry<String, Object> entry : originalMap.entrySet()) {
String snakeKey = camelToSnake(entry.getKey());
resultMap.put(snakeKey, entry.getValue());
}

// 输出转换后的 Map
System.out.println(resultMap);
}

// 将驼峰命名转为下划线命名
private static String camelToSnake(String camelCaseStr) {
StringBuilder result = new StringBuilder();
for (char c : camelCaseStr.toCharArray()) {
if (Character.isUpperCase(c)) {
result.append("_").append(Character.toLowerCase(c));
} else {
result.append(c);
}
}
return result.toString();
}
}
输出结果:
java
复制代码
{user_name=JohnDoe, user_age=30}
方法二:使用 Jackson 自定义策略
如果你希望自动将 JSON 中的字段从驼峰转换为下划线,可以使用 Jackson 的自定义命名策略来实现。

代码示例:
java
复制代码
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import java.util.Map;

public class JacksonCamelToSnake {
public static void main(String[] args) throws Exception {
String jsonString = "{\"userName\":\"JohnDoe\",\"userAge\":30}";

// 创建 ObjectMapper 并设置命名策略为下划线
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);

// 反序列化 JSON 字符串为 Map
Map<String, Object> resultMap = objectMapper.readValue(jsonString, Map.class);

// 输出转换后的 Map
System.out.println(resultMap);
}
}
输出结果:
java
复制代码
{user_name=JohnDoe, user_age=30}
说明
方法一 适用于需要手动控制转换过程的场景,可以灵活处理不同的命名转换规则。
方法二 使用 Jackson 的内置命名策略,可以自动将驼峰格式转换为下划线格式,非常方便,适用于更大规模的项目。
两种方法可以根据你的需求选择合适的实现方式。
我们公司用的企业微信,我感觉就还挺好
@fusi #10 感谢分享
98 天前
回复了 DIMOJANG 创建的主题 微信 我开始有点喜欢微信了
@Mogamigawa #34 好像是,之前有人扒过。还得是小龙,分布式存储玩明白了
98 天前
回复了 DIMOJANG 创建的主题 微信 我开始有点喜欢微信了
@cwcauc #35 确实,能不能出个把服务号也折叠一下的功能
98 天前
回复了 wzw369 创建的主题 问与答 闲鱼的三星固态挺便宜的,可以入手吗?
天上没有白掉的馅饼==
98 天前
回复了 koche 创建的主题 奇思妙想 养花养鱼的小程序
现在是不是有云养花养鱼的,就是你来养,我掏钱买食物或者肥料啥的
@HuberyPang #4 程序员不是缺少这些敏感度,我觉得程序员是高估了广大群众。。。
@xingyue #16 确实全。。。浏览了一遍 19 年到现在的活动记录 https://i.imgur.com/io2SM1h.png
@enchilada2020 #9 开场哪里能看哇老哥,不玩游戏就想看看 hh
@James2099 #13 这是说相声呢啊
@lizy0329 #37 你是在找触控板这个东西吗 hh
威海的海还不赖,荣成那边。青岛的海一般吧 hh
99 天前
回复了 finalshot 创建的主题 Android 有什么推荐的 Android 性价比手机?
@tanranran #22 系统怎么样呀。我备用机一直买的红米系列,感觉 miui 把广告全关了体验还可以。不知道 iqoo 系统咋样
@gggon #20 现在有插拔式微动 hh ,不用自己焊了,即插即用
@lizy0329 #3 大牌子鼠标随便买个,微动坏了换一个就好啦
99 天前
回复了 tsohgdivil 创建的主题 iPhone 可以预见: iPhone 16 又是一代钉子户机型
那就等等明年 618 换,把手上的 13pm 升级一下
1 ... 17  18  19  20  21  22  23  24  25  26 ... 48  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3266 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 36ms · UTC 12:22 · PVG 20:22 · LAX 04:22 · JFK 07:22
Developed with CodeLauncher
♥ Do have faith in what you're doing.