如何在node.js中将json数组数据插入mysql?
Posted
技术标签:
【中文标题】如何在node.js中将json数组数据插入mysql?【英文标题】:How to insert a json array data into mysql in node.js? 【发布时间】:2020-03-15 14:30:02 【问题描述】:我的 json 是这样的:
var data = [ month: 1, customer: 11, revenue: 200,
month: 2, customer: 13, revenue: 210
];
但是当我使用 sql 查询将其插入数据库时
"INSERT into t1 VALUES (data)"
,
我收到错误:"code":"ER_INVALID_JSON_TEXT","errno":3140,"sqlMessage":"Invalid JSON text: \"Invalid value.\" at position 1 in value for column t1.data
正确的查询语法应该是怎样的?任何答案将不胜感激
【问题讨论】:
应该是.query('INSERT into t1 VALUES (?)', [JSON.stringify(data)])
【参考方案1】:
您收到错误的原因是它必须是有效的 json 文本
即键名必须在 '' 引号中,如果它们不是数字,则必须在值中 这是 json 字符串测试器来检查你的 json 的有效性json validator
然后将你的数据字符串化并保存
var data = JSON.parse(body);
var responseJson = JSON.stringify(data.response);
var query = connection.query('INSERT INTO table SET column=?', responseJson,
function(err, result)
if(err) throw err;
console.log('data inserted');
);
【讨论】:
嗨 JonoJames,通过使用该 json 验证器,我的数据是有效的。我唯一需要的是对我的数据进行字符串化。它奏效了【参考方案2】:如果您想将数据以 Json Array 的形式插入到数据库中, 因此插入数据非常容易,无需对数据进行字符串化或进行任何其他操作。我正在为您提供一种最简单的方法。让我们看看...
-
我有一个数据存储在变量 users 中。
let users = [
"Email": "rachel@example.com",
"EmployeeId": "9012",
"Firstname": "Rachel",
"Lastname": "Booker",
"Department": "Sales",
"Location": "Manchester"
,
"Email": "laura@example.com",
"EmployeeId": "2070",
"Firstname": "Laura",
"Lastname": "Grey",
"Department": "Depot",
"Location": "London"
,
"Email": "craig@example.com",
"EmployeeId": "4081",
"Firstname": "Craig",
"Lastname": "Johnson",
"Department": "Depot",
"Location": "London"
,
];
现在我要在 mysql 数据库中插入批量数据。您可以选择任何您想要的,但要注意插入查询。
-
代码是 ==>
let sql = `insert ignore into employee values?`;
let values = [];
//an empty array and push the data in to values array using for loop.
//I have already created a table "Employee" with column name which is I am pushing //Data in same Manner.Note :- (Remember While Pushing data which will same Order as Your table column name)
//for loop is running till the length of the users;
for (let i = 0; i < users.length; i++)
values.push([users[i].Email, users[i].EmployeeId, users[i].Firstname, users[i].Lastname, users[i].Department, users[i].Location])
//Now Running the query (here con is a variable of database );
con.query(sql, [values], (err, result) =>
if (err) throw err;
console.log("rows affected " + result.affectedRows);
);
试试这个非常简单没有任何长代码没有任何错误。
【讨论】:
【参考方案3】:为了给mysql添加一个数组,你需要形成正确的查询 插入多行的语法如下: 插入表名(column1,column2,column3)值 (1, 11, 200), // 第 1 行 (2, 13, 210) // 第 2 行
在您的情况下,您可以按如下方式创建请求:
const sqlQuery = `INSERT INTO t1 VALUES ` + data.map(month, customer, revenue => `($month, $customer, $revenue)`).join(',');
// if you use mysql client
var query = connection.query(sqlQuery, (err) =>
if(err) throw err;
console.log('data inserted');
);
【讨论】:
【参考方案4】:您需要将数组包装在数组中以进行批量插入
var query = connection.query('INSERT INTO table SET column=?', [data],
function(err, result)
if(err) throw err;
console.log('data inserted');
);
【讨论】:
【参考方案5】:感谢您帮助我。 我只需要对我的数据进行字符串化,然后它就可以工作了。
var json = JSON.stringify(data);
这个回报
'[\"month\":11,\"year\":2019,\"customer\":10,\"revenue\":0,
\"month\":12,\"year\":2019,\"customer\":0,\"revenue\":100]'
然后我通过"INSERT INTO table VALUES (json);"
简单地插入了它
【讨论】:
【参考方案6】:我会留下这个适用于我的案例的简单解决方案:
my-model.js
exports.insert = async dataObj =>
try
const TABLE_NAME = 'my-table';
// mysql table fields
const ARR_TABLE_FIELDS = ['ds_prop', 'ds_otherprop', 'created_at'];
// mysql table values which only needs the values
const ARR_VALUES = Object.entries(dataObj).map(keyValue =>
// keyValue arg is an array
// which provides the value in the second position
return `'$keyValue[1]'`
);
// mysql-handler will retrieve the data id
const tableId = await mysqlHandler.insert(TABLE_NAME, ARR_TABLE_FIELDS, ARR_VALUES);
return tableId;
catch (err)
console.error(err.message);
;
mysql-handler.js
使用 NodeJS v12+ 和 npm 包 mysql2 version 2.2.5
async insert(tableName, arrFields, arrValues)
const query = `INSERT INTO $tableName ($arrFields.toString()) VALUES ($arrValues.toString(), CURRENT_TIME())`;
const response = await this.db.query(query);
let id;
if (response && Array.isArray(response) && response[0] && response[0].affectedRows > 0)
id = response[0].insertId;
return id;
【讨论】:
以上是关于如何在node.js中将json数组数据插入mysql?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Sequelize 和 node.js 进行批量插入
如何在 JavaScript node.js 中将 xml 文件解析为数组