MySQL为什么会发生这种情况&引用;{\";主机\";:\";c\";};

MySQL为什么会发生这种情况&引用;{\";主机\";:\";c\";};,mysql,json,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_A

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

SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', '{"host": "c"}')
将字符串作为第三个参数传递给它,它会将字符串附加到存储在
git\u meta
列中的数组中。这就是引号被转义的原因

有两种简单的方法可以实现您的目标:

  • 将要附加的对象包装到数组中,并用于组合JSON文档:

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

    SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', JSON_OBJECT('host', 'c'))
    
  • 函数不会尝试将作为参数接收的值解析为JSON

    SET git_meta = JSON_ARRAY_APPEND(git_meta, '$', '{"host": "c"}')
    
    将字符串作为第三个参数传递给它,它会将字符串附加到存储在
    git\u meta
    列中的数组中。这就是引号被转义的原因

    有两种简单的方法可以实现您的目标:

  • 将要附加的对象包装到数组中,并用于组合JSON文档:

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

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

  • 这就是为什么JSON数据格式类似于{“var_1”:“value”,“var_2”:“value”}。因此,JSON需要将输入中包含的双引号与用于格式化JSON的双引号区分开来,因此它在输入中附加的双引号中添加了“斜杠”。这就是为什么JSON数据格式类似于{“var_1”:“value”,“var_2”:“value”}。因此,JSON需要将输入中包含的双引号与用于格式化JSON的双引号区分开来,因此它会在输入中附加的双引号中添加\“斜杠”!看起来cast({}作为json)确实有效,这也是一个选项。我不喜欢它,很多时候它的使用显示了数据库设计中的一个缺陷,但在这种情况下,它不是一个缺陷。当对象已经表示为JSON(例如,来自外部源)时,它只是JSON对象()的另一种选择。谢谢!看起来cast({}作为json)确实有效,这也是一个选项。我不喜欢它,很多时候它的使用显示了数据库设计中的一个缺陷,但在这种情况下,它不是一个缺陷。当对象已经表示为JSON(例如,来自外部源)时,它只是
    JSON\u OBJECT()。