通过JSON.parseObject() 将字符串转为jsonobject的时候,可以同时将json中的key由下划线蛇形转为驼峰命名方式吗? 不通过自定义对象进行反序列化。
原提问者GitHub用户wolf92
可以通过使用Gson库的JsonDeserializer接口来实现将下划线蛇形命名的key转换为驼峰命名方式,具体步骤如下:
引入Gson库的依赖: com.google.code.gson gson 2.8.7 创建一个实现JsonDeserializer接口的类,重写deserialize方法: import com.google.gson.*;
import java.lang.reflect.Type;
public class SnakeCaseToCamelCaseDeserializer implements JsonDeserializer {
@Override
public JsonObject deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
JsonObject jsonObject = json.getAsJsonObject();
JsonObject result = new JsonObject();
for (String key : jsonObject.keySet()) {
String convertedKey = convertSnakeCaseToCamelCase(key);
JsonElement value = jsonObject.get(key);
result.add(convertedKey, value);
}
return result;
}
private String convertSnakeCaseToCamelCase(String str) {
StringBuilder sb = new StringBuilder();
boolean nextUpperCase = false;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '_') {
nextUpperCase = true;
} else {
if (nextUpperCase) {
sb.append(Character.toUpperCase(c));
nextUpperCase = false;
} else {
sb.append(Character.toLowerCase(c));
}
}
}
return sb.toString();
}
} 调用Gson的fromJson方法,并传入自定义deserializer: import com.google.gson.Gson; import com.google.gson.GsonBuilder;
public class Example { private static final String JSON_STRING = "{"user_name":"John","user_age":30,"user_email":"john@example.com"}";
public static void main(String[] args) {
Gson gson = new GsonBuilder()
.registerTypeAdapter(JsonObject.class, new SnakeCaseToCamelCaseDeserializer())
.create();
JsonObject jsonObject = gson.fromJson(JSON_STRING, JsonObject.class);
System.out.println(jsonObject);
}
} 输出结果:
{"userName":"John","userAge":30,"userEmail":"john@example.com"} 可以看到,key已经被转换成了驼峰命名方式。
现在就支持的,比如:
String json = "..."; Bean bean = JSON.parseObject(json, Bean.class, JSONReader.Feature.SupportSmartMatch);
关于Feature的介绍 https://github.com/alibaba/fastjson2/wiki/Features_cn
你也可以关注 Annotation注入的方式定制反序列化 https://github.com/alibaba/fastjson2/wiki/mixin_cn
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。