MySQL 为什么在 json 插入时发生这种情况? "{\"主机\":\"c\"}"

标签 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 散列,而另一个元素是字符串。

为什么会发生这种情况?

最佳答案

函数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_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/

相关文章:

php - 嵌套的foreach循环执行?

MySQLi : Advance query to limit the number of products for the price range

MySQL 选择并计算具有不同 where 子句的 2 列

Mysql 快速删除换行符、空字符和换行符

java - 在不知道 key 的情况下解析 json

php - 如何在 Laravel Eloquent 查询中收集项目?

javascript - 使用 javascript 函数打印出动态 html 表(jquery 数据表插件)

java - 使用 Jackson 反序列化 JSON 实体的动态属性

objective-c - 从 JSON 数组填充 NSMutableArray

java - 如何在 Struts 2 jQuery 中访问嵌套的 JSON 响应 <sj :select> tag