【问题标题】:Convert raw json string in json object with Jackson使用 Jackson 转换 json 对象中的原始 json 字符串
【发布时间】:2023-03-18 21:30:01
【问题描述】:

Json 对象可以有字符串,而这些字符串可以代表另一个 Json 对象。例如:

{
  "foo" : "foo",
  "bar" : "{\"fizz\":\"baz\"}"
}

以上 JSON 作为 Java 字符串:

"{ \"foo\" : \"foo\", \"bar\" : \"{\\\"fizz\\\":\\\"baz\\\"}\"}"

假设上述结构,我如何让杰克逊将 bar 属性反序列化为另一个 POJO?例子?

class FooBar{
    private String foo;
    private FizzBazz bar;
}

class FizzBazz {
    private String fizz;
}

【问题讨论】:

  • 带注释的 bar 属性:@JsonDeserialize(convertor = FizzBazzConverter.class) 它的实现扩展了 StdConvertor 并仅使用另一个 objectMapper 将字符串转换为 FizzBazz。对于我的情况,它不是一个足够通用的解决方案。我可以将 bar 读取为字符串,然后将其映射到 FizzBazz,但希望 Jackson 一次性为我完成此操作。外部的 json 对象可能有很多这样的原始 json 字符串。
  • 请用所有必需的课程更新您的实际问题。那么就很容易给你答案了。

标签: java json jackson jackson-databind


【解决方案1】:

使用 com.fasterxml.jackson.core 中的 ObjectMapper jackson-databind

public void convertToPojo(){
String jsonInString="{ \"foo\" : \"foo\", \"bar\" : \"{\\\"fizz\\\":\\\"baz\\\"}\"}";

ObjectMapper mapper = new ObjectMapper();
FooBarclsObject = mapper.readValue(jsonInString, FooBar.class);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-10
    • 2012-10-27
    • 2017-08-09
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多