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你找出解决这个问题的办法吗? –