1

假設我有這種情況,我在AWS Lambda中獲得了DynamodbStreamRecord。 從此流記錄(變量命名record),我的Java方法鏈提取這樣的地圖:從DynamodbStreamRecord映射到JSON字符串

Map<String, AttributeValue> w1Data = record.getDynamodb(). 
    getNewImage(). // obtain the image 
    get("DT").  // get from key "DT" 
    getM().   // obtain the related map 
    get("w1_data"). // get from key "w1_data" 
    getM();   // obtain the related map 

現在,我需要在一個JSON字符串變換這類w1Data地圖,我試圖使用org.json.JSONObject構造函數映射作爲輸入參數,隨後toString()

String jsonRepr = new JSONObject(w1Data).toString(); 

但我得到這個奇怪的字符串:

'{"SessionExtraInfo":"{M: {Info={M: {CampaignID={N: 3,}, OriginID={N: 1,}, EntitySourceClassID={N: 8,}},}},}"}' 

這反而應該是這樣的:

'{"SessionExtraInfo": {"Info": {"OriginID": "1", "CampaignID": "3", "EntitySourceClassID": "8"}}}' 

你有什麼建議,以創建這個地圖的有效JSON字符串沒有顯示出由DynamoDB指定的數據類型?

非常感謝您

回答

0

DynamoDB流都有自己的JSNON格式是將它與每一個描述其類型即S代表字符串,N爲號碼和BOOL布爾值值的額外的鍵。

你應該看看這個鏈接http://blogs.aws.amazon.com/javascript/post/Tx1OVH5LUZAFC6T/Announcing-the-Amazon-DynamoDB-Document-Client-in-the-AWS-SDK-for-JavaScript

這已經解決了另一個SO problem類似於你的。

+0

謝謝@Samhash。是的,我已經知道DynamoDB的專用JSON表示,實際上,正如我寫的,我正在尋找可能的解決方案,而不顯示DynamoDB指定的數據類型。無論如何,我正在使用Java,而不是Javascript,所以Javascript AWS SDK中的DocumentClient沒有用。一個可能的解決方案可能是實現一個自定義的方法來執行「翻譯」,但也許有一個來自Java SDK的「魔術方法」,我可以使用,但我無法弄清楚哪一個。 – Marco

+0

@Marco你找出解決這個問題的辦法嗎? –