使用 getters/setter 而不是属性(GSON)将 json 反序列化为 java 对象的简单 java 库
Simple java library to deserialise json to a java object using getters/setter and not properties(GSON)
我目前正在开发基于 REST 的应用程序,需要将 json 对象转换为 class。问题是 class 来自第三方库,我无权访问源文件。
此外,java 对象中的属性与 class 中的 getter/setters 不匹配(不遵循 java bean 约定)。例如,如果我尝试将以下 json 反序列化为 SimpleObject,我会得到空值而不是实际数据。
JSON 输入:
{
name: 'Test',
id: '1'
}
Java class 反序列化为
public class SampleObject {
private String myName;
private Long myId;
public Long getId() {
return this.myId;
}
public String getName() {
return this.myName;
}
.. // setters
}
测试class
public class TestGson {
public static void main(final String[] args) {
final Gson gson = new Gson();
final SampleObject smapleObject = gson.fromJson("{"
+ "name:'Test',"
+ "id: 1"
+ "}", SampleObject.class);
System.out.println(smapleObject.getName());
System.out.println(smapleObject.getId());
}
}
结果:
null
null
预期:
Test
1
问题是 gson 使用属性反序列化 json 而我的要求是使用 getter 和 setters.The class 有 getter和所有属性的设置器,不应该有任何没有属性的属性。
是否有任何其他简单的 json 库可用于实现此目的而无需修改现有 class(无法添加注释,因为源不可用)。我看了一下 Jackson,但做这么简单的任务似乎有点复杂,我的队友对此并不满意。
您可以使用javax.json
String a = "{" + "name:'Test'," + "id: 1" + "}";
StringReader stringReader = new StringReader(a);
JsonReader jsonReader = Json.createReader(stringReader);
JsonObject object = jsonReader.readObject();
SampleObject so=new SampleObject();
so.setName(object.get("name"));
so.setId(object.get("id"));
希望这对你有用。
Jackson 可以做完全一样的事情,语法也几乎相同。
例如:
String json = "{\"name\": \"Test\",\"id\": \"1\"}";
ObjectMapper mapper = new ObjectMapper();
SampleObject sample = mapper.readValue(json, SampleObject.class);
System.out.println(sample.getName());
POJO class :
class SampleObject {
private String myName;
private Long myId;
public Long getId() {
return this.myId;
}
public String getName() {
return this.myName;
}
public void setName(String myName) {
this.myName = myName;
}
public void setId(Long myId) {
this.myId = myId;
}
}
根据JSON约定,键值对必须使用双引号,因此json应该是这样的:
{
"name": "Test",
"id": 1
}
在您的 java 代码上,编辑它们,使其看起来像这样:
final SampleObject smapleObject = gson.fromJson("{"
+ "\"name\":\"Test\","
+ "\"id\": 1"
+ "}", SampleObject.class);
希望对你有所帮助,祝你好运
我目前正在开发基于 REST 的应用程序,需要将 json 对象转换为 class。问题是 class 来自第三方库,我无权访问源文件。 此外,java 对象中的属性与 class 中的 getter/setters 不匹配(不遵循 java bean 约定)。例如,如果我尝试将以下 json 反序列化为 SimpleObject,我会得到空值而不是实际数据。
JSON 输入:
{
name: 'Test',
id: '1'
}
Java class 反序列化为
public class SampleObject {
private String myName;
private Long myId;
public Long getId() {
return this.myId;
}
public String getName() {
return this.myName;
}
.. // setters
}
测试class
public class TestGson {
public static void main(final String[] args) {
final Gson gson = new Gson();
final SampleObject smapleObject = gson.fromJson("{"
+ "name:'Test',"
+ "id: 1"
+ "}", SampleObject.class);
System.out.println(smapleObject.getName());
System.out.println(smapleObject.getId());
}
}
结果:
null
null
预期:
Test
1
问题是 gson 使用属性反序列化 json 而我的要求是使用 getter 和 setters.The class 有 getter和所有属性的设置器,不应该有任何没有属性的属性。
是否有任何其他简单的 json 库可用于实现此目的而无需修改现有 class(无法添加注释,因为源不可用)。我看了一下 Jackson,但做这么简单的任务似乎有点复杂,我的队友对此并不满意。
您可以使用javax.json
String a = "{" + "name:'Test'," + "id: 1" + "}";
StringReader stringReader = new StringReader(a);
JsonReader jsonReader = Json.createReader(stringReader);
JsonObject object = jsonReader.readObject();
SampleObject so=new SampleObject();
so.setName(object.get("name"));
so.setId(object.get("id"));
希望这对你有用。
Jackson 可以做完全一样的事情,语法也几乎相同。
例如:
String json = "{\"name\": \"Test\",\"id\": \"1\"}";
ObjectMapper mapper = new ObjectMapper();
SampleObject sample = mapper.readValue(json, SampleObject.class);
System.out.println(sample.getName());
POJO class :
class SampleObject {
private String myName;
private Long myId;
public Long getId() {
return this.myId;
}
public String getName() {
return this.myName;
}
public void setName(String myName) {
this.myName = myName;
}
public void setId(Long myId) {
this.myId = myId;
}
}
根据JSON约定,键值对必须使用双引号,因此json应该是这样的:
{
"name": "Test",
"id": 1
}
在您的 java 代码上,编辑它们,使其看起来像这样:
final SampleObject smapleObject = gson.fromJson("{"
+ "\"name\":\"Test\","
+ "\"id\": 1"
+ "}", SampleObject.class);
希望对你有所帮助,祝你好运