首页 > 解决方案 > 如何将具有多个对象的 JSON 数据中的值插入 MySQL 的行中?

问题描述

我可以用一个对象将 JSON 数据中的值存储到 MySQL 数据库中,如下所示:

var data = '{"sensorvalue":"96"}'

const jsdata = JSON.parse(data);
connection.query("INSERT INTO `nodes`(`sensorvalue`) VALUES ('"+jsdata.sensorvalue+"')", (err, res) => {
    console.log("counter record inserted");  
}); 

输出:

ID 传感器值
1 96

但是,我想将值存储在具有两个或多个对象的 JSON 数据中,如下所示:

var data = '[{"sensorvalue":"96"},{"sensorvalue":"98"}]'

但是,它将其存储为undefined表中的行中。

预期输出:

ID 传感器值
1 96
2 98

我以前见过这个问题,但我不知道这对我有什么帮助,因为在那个问题中是关于数组数组而不是具有多个对象的 JSON 数据。请问我怎么解决这个问题?

标签: javascriptmysqlsqlnode.jsjson

解决方案


这是一个数组,你需要遍历它。

您也不应该将值直接替换到 SQL 中,而是使用参数化查询。

const jsArray = JSON.parse(data);
jsArray.forEach(jsdata =>
  connection.query("INSERT INTO `nodes`(`sensorvalue`) VALUES (?)", [jsdata.sensorvalue], (err, res) => {
    console.log("counter record inserted");
  })
);

node.js MySQL 连接器还允许您使用二维数组一次在多行中插入值。请参阅如何使用 node.js 在 mySQL 中进行批量插入

const sensorValues = JSON.parse(data).map(el => [el.sensorvalue]);
connection.query("INSERT INTO `nodes`(`sensorvalue`) VALUES ?", sensorValues, (err, res) => {
  console.log(`${sensorValues.length} counter records inserted`);
});

推荐阅读