Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson writeValueAsString:有效的JSON不再有效_Java_Json_Jackson - Fatal编程技术网

Java Jackson writeValueAsString:有效的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

我有一些字符串,我想创建一个有效的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本身是有效的,但是“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类是什么样子的?谢谢您的提示。写了我自己的课,现在一切看起来都很好:)谢谢你的提示。写了我自己的课,现在一切看起来都很好:)