使用节点 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

如何在 json 根节点中添加键值对并使用 SQL Server 将其转换为表

如何以列标题为键获取json格式的handson表数据

将 PySpark 数据帧转换为 JSON,每列作为键

通过将键作为列将 json 字典转换为 spark 数据帧

如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?