与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散列,而另一个是字符串。
为什么会这样?
答案 0 :(得分:2)
函数JSON_ARRAY_APPEND()
不会尝试将它作为参数接收的值解析为JSON。
SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', '{"host": "c"}')
您传递一个字符串作为其第三个参数,它将一个字符串附加到存储在git_meta
列中的数组。这就是报价被转义的原因。
实现目标有两种简单方法:
将要追加的对象包装到数组中,并使用JSON_MERGE()
组合JSON文档:
SET git_meta = JSON_MERGE(git_meta, '[{"host": "c"}]')
使用函数JSON_OBJECT()
创建一个包含所需对象的JSON文档,并将此对象作为要放入JSON列的值传递给JSON_ARRAY_APPEND()
:
SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', JSON_OBJECT('host', 'c'))