【发布时间】:2020-04-22 23:31:51
【问题描述】:
我的目标只是将 JavaScript 对象转换为 JSON 并将其插入到存储 MySQL JSON 数据类型的 MySQL 行中。此过程必须作为大批量插入的一部分进行,因此我无法手动编辑数据。当在对象上调用 JSON.stringify 时,我得到了有效的 JSON,但是,因为该对象包含通常包含单引号的歌词,所以当我尝试运行 SQL 查询时,MySQL 会抛出一个解析错误。
这很好用
const validJson = '{"foo": "bar", "buzz": 1}';
INSERT INTO table_name ( songid, json )
VALUES ( ${song.songid}, ${validJson} );
但是,这不是
const validJsonWithASingleQuote = {"foo's": "bar", "buzz": 1}';
INSERT INTO table_name ( songid, json )
VALUES ( ${song.songid}, ${validJsonWithASingleQuote} );
我也尝试过使用准备好的语句,但没有成功
PREPARE myInsert FROM 'INSERT INTO table_name ( songid, json ) VALUES ( ?, ? )';
SET @a = ${song.songid};
SET @b = ${JSON.stringify(r)};
EXECUTE myInsert USING @a, @b;
我还应该提到,原始的 JavaScript 对象包含的字符串是用“\”转义的单引号。 JSON.stringify 方法对这些反斜杠进行解码。
不幸的是,我在这个主题上发现的所有 SO 问题要么建议手动使用“\”转义单引号,要么都没有得到解决。有没有一种程序化的方式来实现这一点?也许是一个 JavaScript 或 MySQL 方法会生成有效的 JSON 并留下“\”序列?
【问题讨论】:
-
准备好的语句选项应该没问题。在这些情况下,您的 MySQL 客户端是什么?您是直接在 MySQL 中运行查询,还是从另一个进程(如 NodeJS、PHP 等)连接?
标签: javascript mysql json