2013-04-05 74 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