【问题标题】:JSON to POJO conversion using Jackson & JsonPath使用 Jackson 和 JsonPath 将 JSON 转换为 POJO
【发布时间】:2017-03-16 10:26:31
【问题描述】:

我有一个数据场景,我想使用嵌套对象的属性在我的 POJO 类中填充一个属性。下面只是一个例子,但我有很多这样的嵌套变量。

例如我的java类如下

public class Book{
    private String title;
    private String author;
    private  String isbn;
    ...     
}

我需要反序列化的json响应如下

{
    "title":"the jungle book",
    "author":"Rudyard Kipling",
    "code":{
        "isbn":"1616416920"
        }
 }

因此,我的 java 类中的属性 isbn 需要使用 code 对象内的嵌套字段 isbn 填充。

我尝试使用 @JsonProperty 如下

@JsonProperty(value="code.isbn")
private String isbn;

但它仍然在我的 java POJO 类中将属性 isbn 设置为 null。 有人可以建议我该怎么做。

提前谢谢你。

【问题讨论】:

  • json结构是否有规律性或一致性?是"code"下的嵌套属性吗?
  • 在我的实际场景中,由于PHI我无法分享,有多个这样的属性处于不同的级别。创建和实例化这么多我可能不会使用的类会导致内存浪费,因此我试图找到一种方法,可以使用 JsonPath 将这些嵌套属性拉入我的 POJO 对象中。如果我可以使用 ObjectMapper 类将我的 JSOn 解析为 POJO 并以某种方式使用 JsonPath 来获取嵌套属性(如我上面分享的示例中的 isbn),我更喜欢

标签: json jackson unmarshalling pojo jsonpath


【解决方案1】:

您可以编写自定义代码来解析 json 以通过解析嵌套对象来创建具有 isbn 值的 Book 对象。

对于给定的 json,您需要定义一个对象,比如“代码”

public class Book {
    @JsonProperty(value="title")
    private String title;

    @JsonProperty(value="author")
    private String author;

    @JsonProperty(value="code")
    private Code code;
}

public class Code {
    @JsonProperty(value="isbn")
    public String isbn;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 2022-07-24
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2014-01-31
    • 2020-07-29
    相关资源
    最近更新 更多