小编Dav*_*ert的帖子

杰克逊中嵌入的数据对象列表

我有一个看起来像这样的JSON结构:

{"data": [{"mykey": "someval"}, {"mykey": "someotherval"}], "foo": "bar"}
Run Code Online (Sandbox Code Playgroud)

我也有

public MyClass {
    public String mykey;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想将"data"JSON 的内容反序列化为List<MyClass>使用Jackson,因此我有以下代码:

ObjectMapper mapper = new ObjectMapper();
List<MyClass> l = (List<MyClass>) mapper.readerFor(new TypeReference<List<MyClass>>(){}).
    withRootName("data").readValue(myJSONString);
Run Code Online (Sandbox Code Playgroud)

但这给了我一个例外:

com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (FIELD_NAME), 
expected END_OBJECT: Current token not END_OBJECT (to match wrapper object with root name 
'data'), but FIELD_NAME
Run Code Online (Sandbox Code Playgroud)

有人知道我需要做些什么来解析吗?

java json jackson

5
推荐指数
1
解决办法
725
查看次数

为什么 Jackson 要将相同的 JSON 键/值写入两次?

我对杰克逊有以下设置:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.PROPERTY,
    property = "type")
@JsonSubTypes({
    @Type(value = Sub1.class, name = "sub1"),
    @Type(value = Sub2.class, name = "sub2")
})
abstract class BaseClass {
    private String type;

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,Sub1 看起来像这样:

public class Sub1 extends BaseClass {
    String other;

    public String getOther() {
        return other;
    }

    public void setOther(String o) {
        other = o;
    }
}
Run Code Online (Sandbox Code Playgroud)

该设置基本上是为了允许解析包含不同类型嵌入元素的 json 文档。解析有效,但是当我想写出 Sub1 实例时,奇怪的是,“type”键被写入生成的 …

java json jackson

2
推荐指数
1
解决办法
1209
查看次数

标签 统计

jackson ×2

java ×2

json ×2