使用节点 mysql2 获取 JSON 键作为列
Posted
技术标签:
【中文标题】使用节点 mysql2 获取 JSON 键作为列【英文标题】:Getting a JSON key as column with node mysql2 【发布时间】:2021-10-07 12:41:31 【问题描述】:尝试使用节点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
值转义,因为它是用户输入。如何正确逃避?
【问题讨论】:
【参考方案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);
【讨论】:
以上是关于使用节点 mysql2 获取 JSON 键作为列的主要内容,如果未能解决你的问题,请参考以下文章
使用第一列作为键,第二列作为值的 DataFrame 到 Json