对动态创建json感到困惑

时间:2018-01-10 06:08:34

标签: javascript json

我正在尝试根据DynamoDB返回的数据创建JSON。我对如何创建它很困惑。

目前,我将数据放入数组中并在下面填充JSON是我的代码。

var res = {};

dynamodb.scan(params).promise().then(function (data) {
    var ingred = data.Items[0].ingredients;
    res = {
        [ingred]: {}
    };
    ingred.max = Math.max(...data.Items.map(({max}) => parseFloat(max))) + "";
    ingred.min = Math.min(...data.Items.map(({min}) => parseFloat(min))) + "";

    console.log(JSON.stringify(res, null, 4));

})

这次我运行时,我得到如下输出。

{
    "a": {}
}
{
    "b": {}
}
{
    "c": {}
}

当我将代码更改为以下

var res = {};

        dynamodb.scan(params).promise().then(function (data) {
            var ingred = data.Items[0].ingredients;
        console.log(ingred);
            ingred = {};
            ingred.max = Math.max(...data.Items.map(({ max }) => parseFloat(max))) + "";
            ingred.min = Math.min(...data.Items.map(({ min }) => parseFloat(min))) + "";

            console.log(JSON.stringify(ingred, null, 4));

        })

我得到的输出如下

a
{
    "max": "14",
    "min": "8.5"
}
b
{
    "max": "1.98",
    "min": "0.37"
}
c
{
    "max": "155",
    "min": "6"
}

我正在努力实现以下结果。

{
    "a": {
        "max": "14",
        "min": "8.5"
    },
    "b": {
        "max": "1.98",
        "min": "0.37"
    },
    "c": {
        "max": "155",
        "min": "6"
    }
}

请告诉我如何实现这一目标。

由于

4 个答案:

答案 0 :(得分:1)

尝试这样做:

var res = {};
dynamodb.scan(params).promise().then(function (data) {

  var ingred = data.Items[0].ingredients;
  res[ingred] = {};

  res[ingred].max = Math.max(...data.Items.map(({ max }) => parseFloat(max))) + "";
  res[ingred].min = Math.min(...data.Items.map(({ min }) => parseFloat(min))) + "";

  console.log(JSON.stringify(res, null, 4));
})

答案 1 :(得分:1)

maxmin添加到res[ingred]中的对象。

var res = {};
dynamodb.scan(params).promise().then(function (data) {
    var ingred = data.Items[0].ingredients;
    res[ingred] = {};
    res[ingred].max = Math.max(...data.Items.map(({ max }) => parseFloat(max))) + "";
    res[ingred].min = Math.min(...data.Items.map(({ min }) => parseFloat(min))) + "";
    console.log(JSON.stringify(res, null, 4));
})

答案 2 :(得分:1)

您只需在ingred

中设置res即可
var res = {};
dynamodb.scan(params).promise().then(function (data) {
        var ingred = data.Items[0].ingredients;
        res[ ingred ] = {};
        res[ ingred ].max = Math.max(...data.Items.map(({ max }) => parseFloat(max))) + "";
        res[ ingred ].min = Math.min(...data.Items.map(({ min }) => parseFloat(min))) + "";
        console.log(JSON.stringify(res, null, 4));
})

答案 3 :(得分:0)

只需将a和b存储到对象中并将其存储到全局对象中:

  const result = {};

  dynamodb.scan(params).promise().then(function (data){
     const ingred = data.Items[0].ingredients;
     result[ingred] = {
       max: Math.max(...data.Items.map(({ max }) => parseFloat(max))),
       min: Math.min(...data.Items.map(({ min }) => parseFloat(min))),
     };
  })