有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用ID引用将JSON实体反序列化为POJO

假设我们有以下JSON示例:

{
  "teachers": [{
    "id": "abc",
    "payment": 10,
    "name": "xyz",
    "clases": ["1", "3"]
  }, {
    "id": "qwe",
    "payment": 12,
    "name": "xcv",
    "classes": ["1", "2"]
  }],
  "classes": [{
    "id": "1",
    "room": 7
  }, {
    "id": "2",
    "room": 1
  }, {
    "id": "3",
    "room": 2
  }]
}

我想将其反序列化为Java对象(getter/setter-ommited):

class Teacher {
    private String id;
    private double payment;
    private String name;
    private List<CLassRoom> classRooms;
}

class ClassRoom {
    private String id;
    private int room;
}

如你所见,我们这里有一个参考资料。我知道我可以用Jackson反序列化它(而且我很想),但问题是我无法触及DTO本身(因此不可能进行注释,也希望避免包装(许多类))。此外,如果反序列化的“配置”在单独的文件中(例如json schema),那就更好了。我还想避免用户给出的一些标签——他应该只传递值给我。此外,如果他犯了一些错误,他应该知道错误在哪里。 另外,如果我能在json中操作字段名,那就太好了(有些客户端可能有不同的习惯)

我没有发现任何满足上述所有要求的东西(实体引用和错误处理是最重要的)。然而,我刚刚听说过json模式,所以它可能提供了这样的功能(但我没有找到)。有什么有用的参考/示例/库吗?我将感谢任何帮助

为了正确起见,假设给定的json是实例的关系型数据库快照。我只想像hibernate(或者实际上是JPA)那样创建整个实体:)


共 (1) 个答案

  1. # 1 楼答案

    1. add jar of import org.json.JSONObject.
    
    2. JSONObject object = new JSONObject(list)
        2.1 object.has("teachers") if it is exists
        2.2 JSONArray teacherArray = (JSONArray) object.get("teachers");
        2.3 JSONObject teacherJsonObject = teacherArray .getJSONObject(0);
        (if you have more than jsonobject in json arrary then itrate it.)
        2.4 if(teacherJsonObject .has("id"))//you can check existence like this.
            String id=teacherJsonObject .getString("id");
            String payment=teacherJsonObject .getString("payment");
            String name=teacherJsonObject .getString("name");