【问题标题】:How to create POJO dynamically using JSON?如何使用 JSON 动态创建 POJO?
【发布时间】:2020-02-18 10:04:43
【问题描述】:

我有多个动态 json 模板,如下所示

JSON 1

{
      "param1": "testuser1",
      "param2": "testuser1@gmail.com"
}

JSON 2

{
      "param1": "testuser2",
      "param2": "testuser2@gmail.com",
      "param3": "New York"
}

JSON 3

{
      "param1": "testuser3"
      "param2": "testuser3@gmail.com",
      "param3": "New York",
      "param4": [
            {
                "sub-param1": "X",
                "sub-param2": "Y"
            },
            {
                "param1": "testuser",
                "param2": "testuser@gmail.com"
            }
          ]
}

我想在运行时将它们转换为 JAVA 对象,即在编译时不创建 POJO。这可能吗 ?如果是,该怎么做?

我尝试使用Jackson lib将json转换为对象(Object Class),但是如何创建通用的通用PO​​JO或如何使用setter getter动态创建POJO?

【问题讨论】:

  • 为什么不能使用JsonNode类?
  • 是的,我们不知道 json 的内容。
  • 这就是使用 JsonNode 和 JsonObject 类的重点
  • 如果你不介意使用外部库,可以看看[jsonschema2pojo][1] [1]:github.com/joelittlejohn/jsonschema2pojo/wiki/…
  • 如果对象在编译时用户不知道其中存在哪些字段,你应该如何访问此POJO中的字段是吗?

标签: java json jackson


【解决方案1】:

您可能希望将您的 JSON 文档反序列化为 Map<String, Object> 或者使用 Jackson 树模型,如下所示:

TypeReference<Map<String, Object>> type = new TypeReference<Map<String, Object>>() {};
Map<String, Object> map = mapper.readValue(json, type);
JsonNode jsonNode = mapper.readTree(json);

【讨论】:

  • @user12290051 为什么你认为你需要动态创建一个类?
  • 实际上我正在使用 smooks 框架从 json 创建 edi 文件,但 smooks 框架说在转换为 edi 或任何其他格式时定义了 POJO。我创建了一个将 json 转换为 edi 的示例,但我希望将动态 json 文件转换为 edi。所以我在寻找我是否可以做到这一点?我尝试了反射,但没有运气
  • @user12290051 您是否尝试过上述地图方法?
  • 是的,我试过了,谢谢,但是如何在烟雾中使用它需要检查..
猜你喜欢
  • 2011-10-30
  • 2017-12-04
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
相关资源
最近更新 更多