You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:46:52