2013-04-05 174 views
0

我有一些字符串,我想创建一个有效的JSON。Jackson writeValueAsString:有效的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不再有效。为什么会发生?我如何改变或防止这种情况?

+2

你是什么意思无效? 'JSON.parse'正常工作。你的ValueItem类是什么样的? – Dennis 2013-04-05 10:56:43

回答

3

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

你为什么用这种方式代表JSON,在你的Java程序内部?通常,保持纯POJO内部表示并将所有内容转换为JSON更合理,而不是混合使用POJO和JSON。

在你的情况,这将意味着在你Informationdata领域不应该是一个String,而应该是被定义为包含Set<Item> itemslong oid,或其他类似的对象。

+0

感谢您的提示。写了我自己的课,现在一切都很好:) – JustTheAverageGirl 2013-04-05 13:07:56

+0

很高兴听到它 - 好东西! – Olaf 2013-04-08 08:59:18