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 散列,而另一个元素是字符串。
为什么会发生这种情况?
最佳答案
函数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_ARRAY_APPEND()
作为要放入 JSON 列中的值:SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', JSON_OBJECT('host', 'c'))
关于MySQL 为什么在 json 插入时发生这种情况? "{\"主机\":\"c\"}",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37704608/