首页 > 解决方案 > 将 DynamoDB 响应转换为 JSON

问题描述

以下是我对 dynamoDB 的查询

var parse = AWS.DynamoDB.Converter.output;

b.query(params, function(err, results)  {
    if (err) {
        console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        //callback(err);
    } else {
        console.log("Query succeeded.");
        console.log(JSON.stringify(results.Items));
        callback(null, results.Items);
        results.Items.forEach(function(element, index, array) {
        console.log( parse({"M": element.data.M }));
    });
    }
});

我的 DynamoDB 有这样的响应“results.Items”

[{"id":{"S":"arena-MXHGMYzBBP5F6jztnLUdCL"},"data":{"M":{"phaseAngle":{"L":[{"N":"5.0753"},{"N":"5.0506"},{"N":"5.0267"},{"N":"5.0027"},{"N":"4.9793"},{"N":"4.9558"},{"N":"4.9319"},{"N":"4.9077"},{"N":"4.8835"},{"N":"4.8593"}]},"unitID":{"S":"arena-MXHGMYzBBP5F6jztnLUdCL"},"type":{"S":"DATA"},"version":{"S":"1.0.0"},"timestamp":{"N":"1582920097000"},"frequency":{"L":[{"N":"59.9596"},{"N":"59.9635"},{"N":"59.9619"},{"N":"59.9632"},{"N":"59.9616"},{"N":"59.9621"},{"N":"59.9619"},{"N":"59.9613"},{"N":"59.9613"},{"N":"59.9608"}]},"voltage":{"L":[{"N":"122.5669"},{"N":"122.5473"},{"N":"122.5593"},{"N":"122.5627"},{"N":"122.5382"},{"N":"122.5328"},{"N":"122.5758"},{"N":"122.5376"},{"N":"122.526"},{"N":"122.5364"}]}}},"timestamp":{"S":"1582920097000"}}]

我想把它转换成普通的 JSON,看起来像这样https://jxr5e29we5.execute-api.us-east-1.amazonaws.com/prod/alldata

我使用了 AWS.DynamoDB.Converter.output;并且 parse({"M": element.data.M }) 给出了完美的 json,但我无法返回该输出。有什么帮助建议吗?谢谢

标签: jsonamazon-web-servicesamazon-dynamodb

解决方案


解决方案:导入这个 var unmarshalItem = require('dynamodb-marshaler').unmarshalItem; 我在“results.Items”中有响应,现在您可以这样做以完美地获得正常的 json 格式。

var items = results.Items.map(unmarshalItem);
        console.log(items);
        callback(null, items);

但我看到这个 npm 包已被弃用,所以我会尝试用最新的来做这个,DynamoDB/Converter并会在这里更新。


推荐阅读