目录

  • 1 需求说明
  • 2 Java工具类转换实现
    • 2.1 代码
    • 1.2 运行结果
  • 3 转换为对应的java实体

1 需求说明

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

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

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

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

2 Java工具类转换实现

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

2.1 代码


import java.util.Set;public class JsonUtil {public static void convert(Object obj) {if (obj instanceof JSONArray) {JSONArray jsonArray = (JSONArray) obj;for (Object json : jsonArray) {convert(json);}} else if (obj instanceof JSONObject) {JSONObject json = (JSONObject) obj;Set<String> keySet = json.keySet();String[] keyArray = keySet.toArray(new String[keySet.size()]);for (String key : keyArray) {Object value = json.get(key);String[] keyStrs = key.split("_");if (keyStrs.length > 1) {StringBuilder sb = new StringBuilder();for (int i = 0; i < keyStrs.length; i++) {String keyStr = keyStrs[i];if (!keyStr.isEmpty()) {if (i == 0) {sb.append(keyStr);} else {int c = keyStr.charAt(0);if (c >= 97 && c <= 122) {int v = c - 32;sb.append((char) v);if (keyStr.length() > 1) {sb.append(keyStr.substring(1));}} else {sb.append(keyStr);}}}}json.remove(key);json.put(sb.toString(), value);}convert(value);}}}/*** 将json字符串中的key名称中包含下划线的字段,转成驼峰命名格式** @param str String格式的JSON串* @return 转换后的对象(可能是JSONObject或JSONArray)*/public static Object convertUnderlineToCamelCase(String str) {Object obj = JSON.parse(str);convert(obj);return obj;}public static void main(String[] args) {String json = "{\n" +"  \"test\": [\n" +"    {\n" +"      \"self_auth\": {\n" +"        \"a_id\": \"123\",\n" +"        \"b_num\": 7,\n" +"        \"user_name\": \"oldlu\"\n" +"      }\n" +"    }\n" +"  ]\n" +"}";System.out.println(convertUnderlineToCamelCase(json));}
}

1.2 运行结果

{"test": [{"self_auth": {"aId": "123","bNum": 7,"userName": "oldlu"}}]
}

3 转换为对应的java实体

接口定义是蛇形命名,实体类定义为驼峰

主要依靠这句:@JSONType(naming= PropertyNamingStrategy.SnakeCase)

import com.alibaba.fastjson.PropertyNamingStrategy;
import com.alibaba.fastjson.annotation.JSONType;@JSONType(naming= PropertyNamingStrategy.SnakeCase)
public class TestJSON {private String aBcD;public String getaBcD() {return aBcD;}public void setaBcD(String aBcD) {this.aBcD = aBcD;}
}import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;public class Test {public static void main(String[] args) {TestJSON testJSON = new TestJSON();testJSON.setaBcD("aaa");System.out.println(JSONObject.toJSON(testJSON));String json = "{\"a_bc_d\":\"aaa\"}";TestJSON testJSON1 = JSON.parseObject(json, TestJSON.class);System.out.println(JSONObject.toJSON(testJSON1));}
}

结果为:

注:看到结果还是下划线不影响最终转换,如果需要返回不是驼峰的把注解去调即可。


public class TestJSON {private String aBcD;public String getaBcD() {return aBcD;}public void setaBcD(String aBcD) {this.aBcD = aBcD;}
}class Test {public static void main(String[] args) {TestJSON testJSON = new TestJSON();testJSON.setaBcD("aaa");System.out.println(JSONObject.toJSON(testJSON));String json = "{\"a_bc_d\":\"aaa\"}";TestJSON testJSON1 = JSON.parseObject(json, TestJSON.class);System.out.println(JSONObject.toJSON(testJSON1));}
}

Java将json中key值下划线转为驼峰格式相关推荐

  1. json字符串中key值下划线命名转换为驼峰命名

    json字符串中key值下划线命名转换为驼峰命名: 例如: public class JsonUtils {public final static void convert(Object json) ...

  2. python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名

    json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...

  3. 手写:下划线转为驼峰命名法

    驼峰命名法: 命名由首字母小写,后面由首字母大写的一些词块组成 实现将'_'转为驼峰命名法 例如 a_tst 转为 aTest 1.正则表达式(仍有缺陷,待完善) <script>func ...

  4. JAVA获取json中的值

    先导入json格式化的依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson ...

  5. js前端数组对象键大写下划线转驼峰

    js前端数组对象键大写下划线转驼峰 我是分为两步去进行转的 第一步,先将对象的键从大写转换为小写 第二步,再将下划线转为驼峰格式 1.大写转小写代码参考如下 upLowercase(inputObj) ...

  6. 在线下划线转驼峰,驼峰转下划线工具

    在线下划线转驼峰,驼峰转下划线工具 在线下划线转驼峰,驼峰转下划线工具 本工具可以将字符串下划线转为驼峰,或驼峰转下划线,纯客户端计算. 骆驼式命名法(Camel-Case)又称驼峰式命名法,是电脑程 ...

  7. JSON字符串key值驼峰转下划线

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

  8. python读取路径中字符串_python实现提取str字符串/json中多级目录下的某个值

    字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式), ...

  9. python层级抓取_python实现提取str字符串/json中多级目录下的某个值

    字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式), ...

最新文章

  1. Webservice开发流程
  2. Number of 1 bits
  3. 【2019-05-31】生活仪式
  4. 14W 行代码量的前端页面长什么样
  5. palindromic java_LeetCode(java)5. Longest Palindromic Substring
  6. 个人代码库の自定义后缀名
  7. 基于ASP.NET Core api 的服务器事件发送
  8. Java学习笔记2、环境变量配置与初学者常见错误
  9. Dynamic Performance Tables not accessible Automatic Statistics disabled for this session
  10. python是什么专业学的-什么样的人适合学Python,应该怎么学?
  11. EasyUI实现购物车、菜单和窗口栏等最常用的用户界面功能.
  12. 驱动人生解锁“C盘瘦身”功能,助力电脑快速运行
  13. 5个最优秀的Java和C#代码转换工具
  14. [金工实习报告]金工实习基本方法,车工/焊接/钳工/铣工/铸造/安全生产/3D打印等
  15. 不平衡处理(数据层面)
  16. 真爱至上Love Actually
  17. 【灵修】人不迷失方向一定是心中有了目标(转)
  18. vue+ol实现 ol 地图加载geojson
  19. John the Ripper编译安装及使用
  20. 读书笔记---将己之欲,施予他人(六)

热门文章

  1. 【ChatGLM】使用ChatGLM-6B-INT4模型进行P-Tunning训练记录及参数讲解
  2. JAVA毕业设计html5大众汽车网站计算机源码+lw文档+系统+调试部署+数据库
  3. LeetCode Sort List
  4. 窗口设置Service中添加 浮动 View
  5. STM32读取内部UID方法
  6. 模拟电路学习之MOS管和三极管在PROTUES里面的对比
  7. Linux 安装 Nats
  8. 《语音信号处理》整理
  9. 软件设计中,何为重构?
  10. 冼牛:即构实时网络调度系统如何应对跨国场景挑战