Java 将json中key值中带有下划线的部分转为驼峰格式
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
一、背景说明
在开发过程中,有时会遇到第三方厂商提供的接口返回结果不是严格按照驼峰命名,需要将其中带有下划线的字段进行格式化转换为驼峰命名。
如下图中的self_auth、user_id、user_name、creator_name 和 others_auths 等 key 值。
如果是对 JSON 格式里的返回字段清楚的情况下,可以进行逐层解析转换。
但是,效率比较低,而且 JSON 里可能会循环嵌套多层 JSONObject 或 JSONArray。
如何使用通用的方式进行转换?
二、Java语言实现
1、代码
package com.miracle.luna.json;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.Set;
/**
* @author Miracle Luna
* @date 2022/4/30
*/
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 = "{\"namespaces\":[{\"self_auth\":{\"user_id\":\"050b12577f00269a1fcfc01f65239697\",\"auth\":7,\"user_name\":\"user\"},\"auth\":7,\"name\":\"group\",\"creator_name\":\"username\",\"id\":1343008,\"others_auths\":[{\"user_id\":\"06d89c3b6d800f2d1f28c01f0d882285\",\"auth\":1,\"user_name\":\"user_01\"},{\"user_id\":\"050b12577f00269a1fcfc01f65239697\",\"auth\":7,\"user_name\":\"user\"}]}]}";
System.out.println(convertUnderlineToCamelCase(json));
}
}
2、运行结果
{"namespaces":[{"selfAuth":{"auth":7,"userName":"user","userId":"050b12577f00269a1fcfc01f65239697"},"auth":7,"name":"group","creatorName":"username","id":1343008,"othersAuths":[{"auth":1,"userName":"user_01","userId":"06d89c3b6d800f2d1f28c01f0d882285"},{"auth":7,"userName":"user","userId":"050b12577f00269a1fcfc01f65239697"}]}]}
格式化后,带下划线的 key 值,已经全部转为驼峰命名格式。
self_auth、user_id、user_name、creator_name 和 others_auths
转为
selfAuth、userId、userName、creatorName 和 othersAuths
效果如下:
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
7 个月前
更多推荐
已为社区贡献12条内容
所有评论(0)