在Java中,POJO(Plain Old Java Object)通常用于表示数据结构,并且经常与JSON数据交互。默认情况下,许多JSON库(如Jackson或Gson)在将JSON数据反序列化为Java对象时,会期望JSON的key使用camelCase命名约定。然而,有时你可能需要将JSON的key从camelCase转换为蛇形大小写(snake_case)。以下是如何实现这一转换的方法:
如果你使用的是Jackson库,可以通过配置ObjectMapper来实现key的命名策略转换。
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
public class JsonKeyConversionExample {
public static void main(String[] args) throws Exception {
String json = "{\"firstName\":\"John\", \"lastName\":\"Doe\"}";
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
Person person = mapper.readValue(json, Person.class);
System.out.println(person.getFirstName()); // 输出: John
System.out.println(person.getLastName()); // 输出: Doe
}
}
class Person {
private String first_name;
private String last_name;
public String getFirstName() {
return first_name;
}
public void setFirstName(String first_name) {
this.first_name = first_name;
}
public String getLastName() {
return last_name;
}
public void setLastName(String last_name) {
this.last_name = last_name;
}
}
如果你使用的是Gson库,可以通过自定义TypeAdapter来实现key的命名策略转换。
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.TypeAdapter;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
public class JsonKeyConversionExample {
public static void main(String[] args) {
String json = "{\"firstName\":\"John\", \"lastName\":\"Doe\"}";
Gson gson = new GsonBuilder()
.registerTypeAdapter(Person.class, new PersonTypeAdapter())
.create();
Person person = gson.fromJson(json, Person.class);
System.out.println(person.getFirstName()); // 输出: John
System.out.println(person.getLastName()); // 输出: Doe
}
}
class Person {
private String first_name;
private String last_name;
public String getFirstName() {
return first_name;
}
public void setFirstName(String first_name) {
this.first_name = first_name;
}
public String getLastName() {
return last_name;
}
public void setLastName(String last_name) {
this.last_name = last_name;
}
}
class PersonTypeAdapter extends TypeAdapter<Person> {
@Override
public void write(JsonWriter out, Person value) throws IOException {
// 这里可以实现将Person对象转换为JSON的逻辑,如果需要的话
}
@Override
public Person read(JsonReader in) throws IOException {
Person person = new Person();
in.beginObject();
while (in.hasNext()) {
String name = in.nextName();
switch (name) {
case "first_name":
person.setFirstName(in.nextString());
break;
case "last_name":
person.setLastName(in.nextString());
break;
default:
in.skipValue();
break;
}
}
in.endObject();
return person;
}
}
原因:
优势:
PropertyNamingStrategy.SNAKE_CASE
;对于Gson,自定义TypeAdapter来处理命名转换。通过以上步骤,你可以轻松地在POJO中将JSON key从camelCase转换为蛇形大小写。
领取专属 10元无门槛券
手把手带您无忧上云