如何循环访问JSON响应对象以删除属性标签?

时间:2017-03-31 02:03:49

标签: javascript json

// GET - Get login settings
router.route('/login/settings').get((req, res) => {
  let settings =[];
  pool.connect((err, client, done) => {
    client.query('SELECT * FROM public.settings', (err, result) => {
      settings = result.rows;
      res.json({
          settings,
      });
    });
  });
});

我的API路由中有这个代码,它返回以下JSON对象:

{
  "settings": [
    {
      "key": "TwoFactorAuth",
      "value": "false"
    },
    {
      "key": "sessionTimeout",
      "value": "200"
    }
  ]
}

如何在路由代码中编写一个循环来将JSON响应对象更改为:

{
  "settings": [
    {
      "TwoFactorAuth": "false"
    },
    {
      "sessionTimeout": "200"
    }
  ]
}

4 个答案:

答案 0 :(得分:1)

通过在数组上进行映射来更改result.rows对象的形状。

更改第6行:

settings = result.rows;

要:

settings = result.rows.map(setting => ({[setting.key]:setting.value}))

应该这样做

答案 1 :(得分:0)

循环遍历settings数组并使用一个属性创建一个新对象。属性的名称来自原始元素的key元素,属性的值来自value元素。然后用这个替换数组元素。

var settings = response.settings;
for (var i = 0; i < settings.length; i++) {
    var obj = {};
    obj[settings[i].key] = settings[i].value;
    settings[i] = obj;
}

答案 2 :(得分:0)

要将变量添加为某个对象的键,可以使用[key]表示法。 尝试将此对象设置为更新:

settings  = settings.map((data) => {
    var object = {};
    object[data.key] = data.value;
    return object;
});

答案 3 :(得分:0)

试试这个工作片段:

&#13;
&#13;
var jsonObj = {
  "settings": [
    {
      "key": "TwoFactorAuth",
      "value": "false"
    },
    {
      "key": "sessionTimeout",
      "value": "200"
    }
  ]
};

var res = jsonObj.settings.map(function(item) {
  var x={};
  x[item.key] = item.value;
  return x;
});

console.log(res);
&#13;
&#13;
&#13;