首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Jackson在对象中包含原始JSON?

如何使用Jackson在对象中包含原始JSON?
EN

Stack Overflow用户
提问于 2011-01-24 22:56:18
回答 12查看 99.9K关注 0票数 116

当使用Jackson对对象进行(反)序列化时,我尝试在Java对象中包含原始JSON。为了测试此功能,我编写了以下测试:

public static class Pojo {
    public String foo;

    @JsonRawValue
    public String bar;
}

@Test
public void test() throws JsonGenerationException, JsonMappingException, IOException {

    String foo = "one";
    String bar = "{\"A\":false}";

    Pojo pojo = new Pojo();
    pojo.foo = foo;
    pojo.bar = bar;

    String json = "{\"foo\":\"" + foo + "\",\"bar\":" + bar + "}";

    ObjectMapper objectMapper = new ObjectMapper();
    String output = objectMapper.writeValueAsString(pojo);
    System.out.println(output);
    assertEquals(json, output);

    Pojo deserialized = objectMapper.readValue(output, Pojo.class);
    assertEquals(foo, deserialized.foo);
    assertEquals(bar, deserialized.bar);
}

代码输出以下行:

{"foo":"one","bar":{"A":false}}

JSON正是我想要的样子。不幸的是,当尝试将JSON读回对象时,代码会失败并出现异常。以下是例外情况:

org.codehaus.jackson.map.JsonMappingException:无法反序列化位于Source: java.io.StringReader@d70d7a; line: 1, column: 13的java.lang.String out of START_OBJECT token的实例

为什么Jackson在一个方向上工作得很好,而在另一个方向上却失败了?它似乎应该能够再次将自己的输出作为输入。我知道我正在尝试做的事情是非正统的(一般的建议是为bar创建一个内部对象,该对象具有一个名为A的属性),但是我根本不想与这个JSON交互。我的代码充当这段代码的传递--我想接收这个JSON,并在不接触任何东西的情况下再次将其发送出去,因为当JSON发生变化时,我不希望我的代码需要修改。

谢谢你的建议。

编辑:使Pojo成为一个静态类,这会导致不同的错误。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4783421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档