Java Jackson writeValueAsString:有效的JSON不再有效
我有一些字符串,我想创建一个有效的JSON 输入:时间戳、特性、id、数据(是有效的JSON本身)Java Jackson writeValueAsString:有效的JSON不再有效,java,json,jackson,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)); val
{“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本身是有效的,但是“data”元素由于错误而不再是有效的JSON。为什么会发生这种情况?我如何改变它或防止它 问题是因为您将JSON文本表示为
字符串
,因此所有引号都被转义(即使用\“
)
为什么要在Java程序内部以这种方式表示JSON?一般来说,维护一个纯POJO内部表示,然后一次性将所有内容转换为JSON,而不是将POJO和JSON混合在一起,这更有意义
在您的例子中,这意味着
信息
类中的数据
字段不应该是字符串
,而应该是定义为包含集合项
和长oid
或类似内容的对象。问题是因为您将JSON文本表示为文本tring
,因此所有引号都被转义(即使用\“
)
为什么在Java程序内部以这种方式表示JSON?一般来说,维护一个纯粹的POJO内部表示,然后一次性将其转换为JSON,而不是混合使用POJO和JSON,这样做更有意义
在您的情况下,这意味着
信息
类中的数据
字段不应该是字符串
,而应该是定义为包含集合项
和长oid
或类似内容的对象。无效是什么意思JSON.parse
可以很好地处理它。ValueItem类是什么样子的?无效是什么意思JSON.parse
可以很好地处理它。ValueItem类是什么样子的?谢谢您的提示。写了我自己的课,现在一切看起来都很好:)谢谢你的提示。写了我自己的课,现在一切看起来都很好:)