在 mysql table 中插入一个 json 数组

insert a json array in a mysql table

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

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

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

现在我想将整个 json 存储在 mysql 的日志 table 中,所以我在 table 中创建了一个 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`);
                    });

这将引发以下错误:

{ Error: Invalid JSON text: "Invalid value." at position 1 in value for column 'webhook_log.risposta'.

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

{ Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[object Object], created_on=now()' at line 1

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

根据上面的评论,答案是使用 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); });