Jackson writeValueAsString:有效的JSON不再有效

时间:2013-04-05 10:47:34

标签: java json jackson

我有一些字符串,我想创建一个有效的JSON。

输入:时间戳,功能,ID,数据(有效的JSON本身)

{"items":[{"id":"13123545","count": 5, "amount": 11.6},{"id": "1638343", "count": 1, "amount": 55.99}], "oid": 5556}

    //Some code here
    valueItems.add(new ValueItem(timestamp, feature, id, data));
    valueData.setInformation(valueItems);
    valueString = valueMapper.writeValueAsString(valueData);
    System.out.println(valueString);

输出:

{
    "information": [
        {
            "timestamp": "2013-01-01",
            "feature": "login",
            "id": 0,
            "data": "{\"items\":[{\"id\":\"14737\",\"count\": 5, \"amount\": 11.6},{\"id\": \"1874345\", \"count\": 1, \"amount\": 55.99}], \"oid\": 5556}"
        }
    ]
}

JSON本身是有效的,但由于这个原因,“数据”的元素不再是有效的JSON。为什么会这样?我该如何改变或阻止这种情况?

1 个答案:

答案 0 :(得分:3)

问题是因为您将JSON文本表示为String,因此所有引号都被转义(即使用\")。

为什么在Java程序内部以这种方式表示JSON?通常,维护纯POJO内部表示然后一次性将所有这些转换为JSON更有意义,而不是混合POJO和JSON。

在您的情况下,这意味着data类中的Information字段不应该是String,而应该是定义为包含{{1}的对象}和Set<Item> items,或类似的东西。