Из карты DynamodbStreamRecord в строку JSON

Допустим, у меня есть такая ситуация, когда я получил DynamodbStreamRecord внутри AWS Lambda. Из этой записи потока (переменная с именем record) у меня есть цепочка методов Java, которая извлекает карту следующим образом:

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

Теперь мне нужно преобразовать такую ​​карту w1Data в строку JSON, и я попытался использовать конструктор 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?

Большое тебе спасибо


person Marco    schedule 03.08.2016    source источник


Ответы (1)


DynamoDB Stream имеет собственный формат JSNON, в котором у него есть дополнительный ключ с каждым значением, описывающим его ТИП, то есть S для строки, N для числа и BOOL для логического значения.

Вам следует изучить эту ссылку http://blogs.aws.amazon.com/javascript/post/Tx1OVH5LUZAFC6T/Announcing-the-Amazon-DynamoDB-Document-Client-in-the-AWS-SDK-для-JavaScript

Это решило еще одну проблему SO, похожую на вашу.

person Samhash    schedule 05.08.2016
comment
Спасибо @Samhash. Да, я уже знаю о выделенном представлении JSON для DynamoDB и действительно, как я уже писал, я ищу возможное решение без отображения типов данных, указанных DynamoDB. В любом случае, я использую Java, а не Javascript, поэтому DocumentClient из Javascript AWS SDK бесполезен. Возможным решением может быть реализация пользовательского метода для выполнения перевода, но, возможно, есть волшебный метод из Java SDK, который я могу использовать, но я не могу понять, какой именно. - person Marco; 05.08.2016
comment
@Marco Марко, ты нашел какое-нибудь решение этой проблемы? - person Ram Mittala; 17.07.2017
comment
продублировано: stackoverflow.com/questions/37655755/ - person devwebcl; 19.02.2020