我正在使用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'
我目前的表格格式为:
答案 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];
});