Node.js+MySQL环境下JSON类型数据的查询、处理与更新方法问询
嘿,刚好我也常折腾Node.js+MySQL的JSON数据处理,给你拆解下这三个问题的解决思路:
Node.js + MySQL 处理JSON数据类型全指南
a) 如何查询JSON类型数据
MySQL对JSON类型提供了专门的查询语法和函数,常用的有两种方式:
- 查询整个JSON列:直接像普通字段一样
SELECT即可,就像你示例里的SELECT test FROM test,返回的是完整的JSON字符串。 - 提取JSON内的特定字段:用
->或->>运算符,或者JSON_EXTRACT()函数:
这里的-- 提取entryid下的a字段,返回带双引号的字符串 SELECT test->'$.entryid.a' FROM test; -- 提取entryid下的a字段,返回原始数值(不带引号) SELECT test->>'$.entryid.a' FROM test; -- 和->等价的函数写法 SELECT JSON_EXTRACT(test, '$.entryid.a') FROM test;$.entryid.a是JSON路径语法,$代表整个JSON对象,后面跟着层级字段名。
b) 在Node.js代码中处理查询结果
你现在的代码拿到的是JSON格式的字符串,必须转换成JavaScript对象才能方便操作属性。修改你的代码如下:
sql.getConnection((err, con) => { if (err) throw err; // 别忘了处理连接错误哦 con.query("SELECT test FROM test", (error, rows) => { con.release(); if (error) throw error; // 把JSON字符串解析成JS对象 const jsonData = JSON.parse(rows[0].test); // 现在就能直接访问里面的属性了 console.log(jsonData.entryid.a); // 输出1 console.log(jsonData.entryid['...']); // 访问其他嵌套属性 }); });
如果你的项目用的是mysql2库(比老版mysql库更推荐),可以在连接配置里加json: true,这样查询到的JSON列会自动被解析成JS对象,不用手动调用JSON.parse(),省不少事。
c) 以JSON格式更新数据库条目
MySQL提供了几个实用的JSON更新函数,根据需求选就行:
JSON_SET():设置或更新指定路径的值(路径不存在就新增)JSON_INSERT():仅在路径不存在时插入值JSON_REPLACE():仅在路径存在时替换值
举个实际例子,比如要更新test表中id=1的条目,把entryid.a改成3,Node.js代码这么写:
sql.getConnection((err, con) => { if (err) throw err; const updateSql = `UPDATE test SET test = JSON_SET(test, ?, ?) WHERE id = ?`; // 参数顺序:JSON路径、新值、条目ID(用占位符避免SQL注入) const params = ['$.entryid.a', 3, 1]; con.query(updateSql, params, (error, result) => { con.release(); if (error) throw error; console.log(`成功更新了 ${result.affectedRows} 条数据`); }); });
如果要一次性更新多个字段,直接在JSON_SET()里追加路径和值就行:
UPDATE test SET test = JSON_SET(test, '$.entryid.a', 3, '$.entryid.b', 'new content') WHERE id = 1;
内容的提问来源于stack exchange,提问作者Valamorde
相关产品推荐
相关产品推荐

