java - 将内部 JSON 对象提取为 Jackson 中的 String

标签 java json serialization jackson

我想使用 Jackson 反序列化以下 JSON 对象。

[
    {
      "_foo": "foo-value",
      "_bar": {// bar json object }
    },
    {
      "_foo": "foo-value",
      "_bar": {// bar json object }
    }
]

我不关心 bar JSON 对象,所以我只想将其解析为字符串。我的 Pojo 类如下所示:

@Data
public class Document {

  @JsonProperty("_foo")
  private String foo;

  @JsonProperty("_bar")
  private String bar;
} 

当我尝试使用 Jackson 并使用以下代码反序列化对象时。它抛出异常。

List<Document> docs = mapper.readValue(fileContent, new TypeReference<List<Document>>() {
        })

异常(exception):

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token

我哪里做错了?

最佳答案

如果你不在乎,那么你可以忽略这个属性:

@Data
@JsonIgnoreProperties(value = {"_bar"})
public static class Document { ...

或者您可以使用 JsonNode 添加 setter :

    @JsonProperty("_bar")
    private String bar;

    @JsonSetter
    private void setBar(JsonNode jsonNode) {
        this.bar = jsonNode.toString();
    }

    private void setBar(String bar) {
        this.bar = bar;
    }

或者使用 JsonNode 作为字段:

    @JsonProperty("_bar")
    private JsonNode bar;

关于java - 将内部 JSON 对象提取为 Jackson 中的 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61341049/

相关文章:

java - 如何监控和记录构建(编译/测试)时间?

javascript - 如何在 Controller 中格式化 JSON 数据

java - jackson 数据绑定(bind)枚举不区分大小写

c# - 如何序列化 Nullable<bool>?

java - db4o Java 8 兼容吗?

java - 比较字符串并返回 boolean 值

java - Travis CI + Coverity 使用 Gradle 进行扫描

java - 按钮移至错误位置

php - JSON 格式化额外字符

java - 如何在 JSONObject 中获取没有名称的 JSONArrays