在 mysql 表中插入一个 json 数组

问题描述

使用 MysqL2 我正在解析来自端点的 json 响应并将其一些值插入到 MysqL 数据库中。 我现在想要做的是将此响应记录在我的数据库表中。我收到的 json 位于一个名为 data 的变量中,我可以正确访问它的值,例如 data.object.account_country 等。

data一个像这样的有效 json(为了隐私而修剪):

{
    "object": {
      "id": "in_1IYxloLuHwfLSa62Zjqz5jX5","object": "invoice","account_country": "IT",}
}

现在我想将整个 json 存储在 MysqL一个日志表中,所以我在我的表中创建了一个 json 列,并尝试插入 json。

我的查询如下所示:

con1.query("INSERT INTO webhook_log SET tipo='"+eventType+"',risposta='"+data+"',created_on=Now()",function(err,result){
                        if(err) throw err;
                        console.log(`🔔  Webhook logged`);
                    });

这会引发以下错误

{ 错误:无效的 JSON 文本:“无效的值。”在“webhook_log.risposta”列的值中的位置 1。

我也尝试删除数据周围的单引号,但在这种情况下我得到:

{ 错误:您的 sql 语法有错误;检查与您的 MysqL 服务器版本相对应的手册,以获取在第 1 行的“[object Object],created_on=Now()”附近使用的正确语法

显然我在这里做错了什么,但我无法发现错误

解决方法

根据上面的评论,答案是使用 JSON.stringify 将 Javascript 对象转换为 JSON 字符串。

也使用 SQL 查询参数。一旦掌握了窍门,它实际上比进行字符串连接和尝试平衡所有引号时眼睛疲劳要容易得多。

con1.query("INSERT INTO webhook_log SET tipo=?,riposta=?,created_on=now()",[eventType,JSON.stringify(data)],function(err,result){ if(err) throw err; console.log(🔔  Webhook logged); });