我有一些字符串,我想创建一个有效的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。为什么会这样?我该如何改变或阻止这种情况?
答案 0 :(得分:3)
问题是因为您将JSON文本表示为String
,因此所有引号都被转义(即使用\"
)。
为什么在Java程序内部以这种方式表示JSON?通常,维护纯POJO内部表示然后一次性将所有这些转换为JSON更有意义,而不是混合POJO和JSON。
在您的情况下,这意味着data
类中的Information
字段不应该是String
,而应该是定义为包含{{1}的对象}和Set<Item> items
,或类似的东西。