【问题标题】:Getting a JSON key as column with node mysql2使用节点 mysql2 获取 JSON 键作为列
【发布时间】:2025-12-10 12:15:01
【问题描述】:

尝试使用节点mysql2包进行以下SQL查询:

SELECT name, someObject->>"$.foo" as slice
FROM someTable;

someTable有2列:name,一个varchar;和someObject,一个JSON 列。

想象一下至少存在这样的一行:

name      someObject
==========================
John      { "foo": "bar" }

查询的预期结果是:

name      slice
==========================
John      bar

只需这样做即可:

const result = await connection.query('SELECT name, someObject->>"$.foo" as slice FROM someTable');

但是,我需要将 foo 值转义,因为它是用户输入。如何正确逃避?

【问题讨论】:

    标签: mysql node.js json mysql2


    【解决方案1】:

    写下问题,我想出了答案。希望这对其他人有所帮助。

    考虑列/切片字符串:someObject->>"$.foo"

    答案是:将列部分 (someObject) 视为列,将字符串部分 ($.foo) 视为字符串。

    所以要正确地逃避它:

    const columnName = "someObject";
    const sliceName = "$.foo";
    
    const sql = 'SELECT name, ??->>? as slice FROM someTable';
    const values = [columnName, sliceName];
    const result = await connection.query(sql, values);
    

    【讨论】: