MySQL为什么会发生ob json insert? “{\”host \“:\”c \“}”

时间:2016-06-08 13:56:39

标签: mysql json

与mysql和json的交易是什么?这毫无意义。

1)这是我将第一次插入的数据插入记录

的方法
truncate git_object;
INSERT INTO git_object (user_id,git_meta) VALUES ('11111','[{"host": "a", "id": "1"}]');

结果如下:

11111, [{"id": "1", "host": "a"}]

现在我想要追加到数组中:

Update git_object
set  git_meta=JSON_ARRAY_APPEND(git_meta, '$', '{"host": "c"}')
where user_id='11111';

结果如下:

11111, [{"id": "1", "host": "a"}, "{\"host\": \"c\"}"]

那么......最后一次插入中与“\”的处理是什么?

这破坏了从python调用mysql的破坏,因为我解码为json时的第一个元素将返回python散列,而另一个是字符串。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

函数JSON_ARRAY_APPEND()不会尝试将它作为参数接收的值解析为JSON。

SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', '{"host": "c"}')

您传递一个字符串作为其第三个参数,它将一个字符串附加到存储在git_meta列中的数组。这就是报价被转义的原因。

实现目标有两种简单方法:

  1. 将要追加的对象包装到数组中,并使用JSON_MERGE()组合JSON文档:

    SET git_meta = JSON_MERGE(git_meta, '[{"host": "c"}]')
    
  2. 使用函数JSON_OBJECT()创建一个包含所需对象的JSON文档,并将此对象作为要放入JSON列的值传递给JSON_ARRAY_APPEND()

    SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', JSON_OBJECT('host', 'c'))