Java将json中key值下划线转为驼峰格式
目录
- 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值下划线转为驼峰格式相关推荐
- json字符串中key值下划线命名转换为驼峰命名
json字符串中key值下划线命名转换为驼峰命名: 例如: public class JsonUtils {public final static void convert(Object json) ...
- python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名
json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...
- 手写:下划线转为驼峰命名法
驼峰命名法: 命名由首字母小写,后面由首字母大写的一些词块组成 实现将'_'转为驼峰命名法 例如 a_tst 转为 aTest 1.正则表达式(仍有缺陷,待完善) <script>func ...
- JAVA获取json中的值
先导入json格式化的依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson ...
- js前端数组对象键大写下划线转驼峰
js前端数组对象键大写下划线转驼峰 我是分为两步去进行转的 第一步,先将对象的键从大写转换为小写 第二步,再将下划线转为驼峰格式 1.大写转小写代码参考如下 upLowercase(inputObj) ...
- 在线下划线转驼峰,驼峰转下划线工具
在线下划线转驼峰,驼峰转下划线工具 在线下划线转驼峰,驼峰转下划线工具 本工具可以将字符串下划线转为驼峰,或驼峰转下划线,纯客户端计算. 骆驼式命名法(Camel-Case)又称驼峰式命名法,是电脑程 ...
- JSON字符串key值驼峰转下划线
起因 工作中需要解析特殊的JSON字符串,将JSON文本中所有的Map结构中的key的格式由驼峰转换为下划线.本着不重复造轮子的原则,我在网上搜索到了一些资料,都是下划线转驼峰的工具,没有驼峰转下划线 ...
- python读取路径中字符串_python实现提取str字符串/json中多级目录下的某个值
字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式), ...
- python层级抓取_python实现提取str字符串/json中多级目录下的某个值
字符串多级目录取值: 比如说: 你response接收到的数据是这样的. 你现在只需要取到itemstring 这个字段下的值.其他的都不要! 思路就是:字符串是个json格式(或转为json格式), ...
最新文章
- Webservice开发流程
- Number of 1 bits
- 【2019-05-31】生活仪式
- 14W 行代码量的前端页面长什么样
- palindromic java_LeetCode(java)5. Longest Palindromic Substring
- 个人代码库の自定义后缀名
- 基于ASP.NET Core api 的服务器事件发送
- Java学习笔记2、环境变量配置与初学者常见错误
- Dynamic Performance Tables not accessible Automatic Statistics disabled for this session
- python是什么专业学的-什么样的人适合学Python,应该怎么学?
- EasyUI实现购物车、菜单和窗口栏等最常用的用户界面功能.
- 驱动人生解锁“C盘瘦身”功能,助力电脑快速运行
- 5个最优秀的Java和C#代码转换工具
- [金工实习报告]金工实习基本方法,车工/焊接/钳工/铣工/铸造/安全生产/3D打印等
- 不平衡处理(数据层面)
- 真爱至上Love Actually
- 【灵修】人不迷失方向一定是心中有了目标(转)
- vue+ol实现 ol 地图加载geojson
- John the Ripper编译安装及使用
- 读书笔记---将己之欲,施予他人(六)