Java将json中key值下划线转为驼峰格式
Posted 赵广陆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java将json中key值下划线转为驼峰格式相关的知识,希望对你有一定的参考价值。
目录
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));
结果为:
注:看到结果还是下划线不影响最终转换,如果需要返回不是驼峰的可能还需要没有注解的实体进行赋值转换,或者用上方工具类看自己取舍。
以上是关于Java将json中key值下划线转为驼峰格式的主要内容,如果未能解决你的问题,请参考以下文章