使用 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);

希望对你有所帮助,祝你好运