javascript - 如何将具有多个对象的 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 数据。请问我怎么解决这个问题?
解决方案
这是一个数组,你需要遍历它。
您也不应该将值直接替换到 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`);
});
推荐阅读
- fonts - Font Face Observer 在页面加载时加载所有字体?
- java - 无法在 SQLite 中向表中插入信息
- firebase - Firebase for Unity 是否包含 childByAutoId?
- javascript - 使用 javascript 填充 django 内联管理字段
- python - 根据两个键过滤字典列表
- barbajs - Barba.js - 自定义 CSS 过渡不起作用
- oracle - how to call a function in a procedure?
- sql-server - 如何使用具有默认值的多个输入创建存储过程?
- swift - 使用 SwiftUI @Binding 预览崩溃:与应用程序的通信中断
- python - 处理好对象类型的困惑