我想使用 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/