起因

工作中需要解析特殊的JSON字符串,将JSON文本中所有的Map结构中的key的格式由驼峰转换为下划线。本着不重复造轮子的原则,我在网上搜索到了一些资料,都是下划线转驼峰的工具,没有驼峰转下划线。

工具改造

此处借鉴了一篇下划线转驼峰的代码示例(传送门)

调整逻辑后实现了驼峰转下划线,代码如下:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.Set;public class StringUtil {/*** 处理JSON文本中的key,将驼峰格式转为下换线* @param json* @return*/public final static Object convert(String json) {Object obj = JSON.parse(json);convert(obj);return obj;}public final static void convert(Object json) {if (json instanceof JSONArray) {JSONArray arr = (JSONArray) json;for (Object obj : arr) {convert(obj);}} else if (json instanceof JSONObject) {JSONObject jo = (JSONObject) json;Set<String> keys = jo.keySet();String[] array = keys.toArray(new String[keys.size()]);for (String key : array) {Object value = jo.get(key);String[] key_strs = key.split("");if (key_strs.length > 1) {StringBuilder sb = new StringBuilder();for (int i = 0; i < key_strs.length; i++) {String ks = key_strs[i];if (!"".equals(ks)) {if (i == 0) {sb.append(ks);} else {int c = ks.charAt(0);if (c >= 65 && c <= 90) {int v = c + 32;sb.append("_");sb.append((char) v);if (ks.length() > 1) {sb.append(ks.substring(1));}} else {sb.append(ks);}}}}jo.remove(key);jo.put(sb.toString(), value);}convert(value);}}}
}

测试用例:

{"extended_info": {"dataLinkFilter": [{"val": "qt_005ztyz","func": "equals","elementId": "euWngEc3KIYgB1Ndvn3Z0JHg6BNGeddx","type": "current_element"}],"refer_entity_id": "9d444c77-3dec-4c45-ba43-bc90ca439179"},"defaultType": "link"
}

经测试,JSON字符串中的所有的key如果是驼峰格式,将转换为下划线,转换后结果如下:

{"extended_info": {"data_link_filter": [{"val": "qt_005ztyz","func": "equals","element_id": "euWngEc3KIYgB1Ndvn3Z0JHg6BNGeddx","type": "current_element"}],"refer_entity_id": "9d444c77-3dec-4c45-ba43-bc90ca439179"},"default_type": "link"
}

总结:

遇到需要使用工具类的情况,比较简单的可以试着自己封装,复杂的也不要一直查找资料,一心找现成的。还是需要多动脑,在前人的基础上添砖加瓦。

JSON字符串key值驼峰转下划线相关推荐

  1. fastjson 转下划线_Java开发里遇到的奇奇怪怪的需求---JSON键值驼峰转下划线的实现...

    上周在与第三方对接接口的时候,由于三方的接口key值均是采用下划线命名的方式,使用传统的JSONObject方式,需要挨个赋值,特别麻烦,而且一点也不面向对象,一点也不极客. 大概实现的效果就是上图这 ...

  2. python 下划线转驼峰,Go语言json编码驼峰转下划线、下划线转驼峰的实现

    一.需求 golang默认的结构体json转码出来,都是根据字段名生成的大写驼峰格式,但是一般我们最常用的json格式是小写驼峰或者小写下划线,因此,我们非常需要一个统一的方法去转换,而不想挨个写js ...

  3. js 驼峰转下划线

    js 驼峰转下划线 hump2Underline(s) {return s.replace(/([A-Z])/g, '_$1').toLowerCase()}, // JSON对象的key值转换为下划 ...

  4. fastjson 序列化时指定json的key值

    json字符串中的key是下划线例如:foot_dist,而实际实体类中的属性是footDist,添加 @JSONField(name = "foot_dist")即可 packa ...

  5. fastjson转换json字符串key的首字母小写变大写的解决办法

    问题描述 在开发过程中,由于接口文档的描述,要求json字符串的key首字母为大写,而java 的规范要求在定义bean的时候,成员属性是首字母小写的驼峰格式,java的基本规范一定要遵守,否则会出现 ...

  6. springboot接口入参下划线转驼峰以及返回参数驼峰转下划线实现

    转自:springboot接口入参下划线转驼峰以及返回参数驼峰转下划线实现 - 李东平|一线码农 - 博客园 (cnblogs.com) 1.背景 在实际开发中,通常来说java里面是使用驼峰的命名规 ...

  7. mysql json 引号 双引号_关于JSON字符串key缺少双引号的解决方法 的讲解

    JSON字符串key缺少引号的解决方法 JSON字符串是key:value形式的字符串,正常key是由双引号括起来的. 例如:<?php $data = array('name'=>'fd ...

  8. js字段名下划线命名转驼峰,驼峰转下划线

    1. 下划线转驼峰 function toHump(name) {return name.toLocaleLowerCase().replace(/\_(\w)/g, function(all, le ...

  9. 驼峰转下划线下划线转驼峰

    1.驼峰转下划线 private String humpToLine(String str) {Pattern humpPattern = Pattern.compile("[A-Z]&qu ...

最新文章

  1. 解决Mybatis启动报错: Invalid bound statement (not found)
  2. lucene学习001
  3. FCN网络训练 SIFTFLOW数据集
  4. Netflix是如何构建代码的
  5. 技术 KPI 的量化
  6. ZooKeeper入门(二)Java操作zookeeper
  7. eos节点服务器_长期看,EOS柚子能不能达到1000元?
  8. 开发是在什么部门办理_房产证办理流程是什么?办理房产证需要缴纳哪些费用?...
  9. 【C++入门】C++ string类
  10. leetcode最小面积_LeetCode 题解 |力扣杯 LCP 13.寻宝
  11. android交叉编译工具链,NDK 交叉编译工具链使用
  12. 夜曲编程python_夜曲编程免费PC版-夜曲编程电脑版下载 v1.0.0--PC6电脑版
  13. 【考研英语语法】一般过去式练习题
  14. FPGA实现和ET1100通信verilog源码。 ethercat从站方案
  15. 圆通快递拒收后,如何快速查询退回件单号的物流情况
  16. 使用pycharm + kivy开发自己的app
  17. AndroidStudio_自定义AndroidStudio Locat的输出颜色
  18. 一分钟学会自定义右上角显示数字的ImageView
  19. Android 控件 之 Adapter
  20. 怎样进行股票量化对冲策略分析?

热门文章

  1. Windows每个版本自带的.NET版本,与支持的最高.NET版本
  2. linux 运行中磁盘故障,Linux 检查磁盘损坏情况命令 -必会
  3. 网络安全—2.1—设备原理与操作
  4. Mac安装与配置jmeterjmeter的使用jmeter生成性能测试报告
  5. 迷宫游戏python实现
  6. 使用深度学习进行目标检测
  7. form-login属性详解
  8. 6.3.1.8 Packet Tracer - 探索网络互联设备-熟悉Packet Tracer模拟器
  9. win10 linux 修复引导菜单,win10 + Ubuntu16.04双系统修复linux grub引导丢失
  10. 快速傅里叶变换(FFT)(学习笔记)