将 NodeJs MySQL 结果转换为可访问的 JSON 对象

pet*_*ann 6 javascript mysql json node.js

我想从我的数据库中获取一些数据。例子:

  getCarIds: function (callback) {
    db.query("SELECT Id FROM Cars;",
      function (err, result) {
        if (err) throw err;

        result = JSON.stringify(result);

        var cars = [];

        for (var i = 0; i < result.length; i++) {
          var currentCar = result[i];
          var carId = currentCar.id;
          cars.push(carId);
        }

        callback(cars);
      });
  }
Run Code Online (Sandbox Code Playgroud)

我想将所有 id 存储到一个数组中。喜欢

cars = [1,2,3,4,5];
Run Code Online (Sandbox Code Playgroud)

结果返回这个

[ RowDataPacket { Id: '1' },
  RowDataPacket { Id: '2' },
  RowDataPacket { Id: '3' } ]
Run Code Online (Sandbox Code Playgroud)

所以我尝试通过写作来转换它

result = JSON.stringify(result);
Run Code Online (Sandbox Code Playgroud)

这还给我

[{"Id":"1"},{"Id":"2"},{"Id":"3"}]
Run Code Online (Sandbox Code Playgroud)

当我想通过写入访问此对象时

result[0]

我得到

[

如此明显

result[0].id
Run Code Online (Sandbox Code Playgroud)

将返回

undefined
Run Code Online (Sandbox Code Playgroud)

如何从对象中获取所有 ID?

Zac*_*aad 11

假设您有一个RowDataPacket来自 mysql的结果数组,名为results. 您可以使用 Object.assign()。例如,如果您想将第一个元素转换为常规对象:

var normalObj = Object.assign({}, results[0]);
Run Code Online (Sandbox Code Playgroud)

或者,如果您想将整个数组转换为普通对象:

var normalResults = results.map((mysqlObj, index) => {
    return Object.assign({}, mysqlObj);
});
Run Code Online (Sandbox Code Playgroud)

或更紧凑的语法:

results = results.map(v => Object.assign({}, v));
Run Code Online (Sandbox Code Playgroud)


Aka*_*han 0

你不需要stringify。 只需按原样result处理即可。result

并使用currentCar.Id代替currentCar.id.