使用Node将嵌套的JSON插入MySQL

时间:2017-03-30 00:23:59

标签: javascript mysql json node.js

我正在使用Node来使用Node.js

将JSON插入MySQL

这样可以正常工作,直到我有嵌套值。

我的JSON示例在这里:

var result2 = [{
"id": 89304,
"employeeDetails": {
    "id": 102524,
    "version": 9
}
}, {
"id": 89305,
"employeeDetails": {
    "id": 102522,
    "version": 99
}
}];

注意: 我正在使用上面的测试,因为我想在JSON中调用API请求并返回它们。 < / p>

这是我使用Node.js将其发送到MySQL的方式:

var query = connection.query('INSERT INTO employees SET ?', result2,
function(error, results, fields) {
    if (error) throw error;
});

没有嵌套,这工作正常,但是嵌套的employeeDetails给了我以下错误:

Error: ER_BAD_FIELD_ERROR: Unknown column 'employeeDetails' in 'field list'

我目前的表格格式为:

  • 字段:“userID”,INT
  • 字段:“id”,INT
  • 字段:“版本”,INT

1 个答案:

答案 0 :(得分:1)

正如文档https://www.npmjs.com/package/mysql#escaping-query-values中所述:

  

对于每个可枚举属性,对象变为key ='val'对   在对象上。如果属性的值是函数,则跳过它;   如果属性的值是一个对象,则在其上调用toString()   使用返回的值。

因此,您无法使用嵌套对象,因为它被视为一个字段。

您可以通过对象数组循环:

var result2 = [{
  "id": 89304,
  "userId": 102524,
  "version": 9
}, {
  "id": 89305,
  "userId": 102522,
  "version": 99
}
}];
for(var i in result2) {
  var query = connection.query('INSERT INTO employees SET ?', result2[i],
  function(error, results, fields) {
    if (error) throw error;
  });
}

或者更简单地说,如果您的目标是使用嵌套数组完成批量INSERT:

var result2 = [[89304, 102524, 9], [89305, 102522, 99]];
var query = connection.query('INSERT INTO employees(id, userId, version) VALUES ?', [result2],
function(error, results, fields) {
  if (error) throw error;
});

有一种从原始嵌套对象转换为Bulk INSERT的方法:

var result2 = result2.map(function(el){
    return [el.id, el.employeeDetails.id, el.employeeDetails.version];
});