10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 下载本手册 从本手册中摘录

12.18.4修改JSON值的函数

本节中的函数修改JSON值并返回结果。

mysql> SELECT JSON_MERGE_PRESERVE('[1, 2]', '[true, false]');+------------------------------------------------+ | JSON_MERGE_PRESERVE([1, 2],[真的,假的 ]') | +------------------------------------------------+ | [ 1、2,真的,假的 ] | +------------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE('{“名称”:“x”}',' {" id ": 47} ');+----------------------------------------------------+ | JSON_MERGE_PRESERVE('{“名称”:“x”}’,‘{" id ": 47 }') | +----------------------------------------------------+ | {" id: 47岁的“名称”:“x "} | +----------------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE(' 1 ', '真的');+----------------------------------+ | JSON_MERGE_PRESERVE(' 1 ', '真的 ') | +----------------------------------+ | [ 1、真正的 ] | +----------------------------------+ mysql >选择JSON_MERGE_PRESERVE(“[1,2]”,“{" id ": 47}”);+---------------------------------------------+ | JSON_MERGE_PRESERVE(“[1,2]”、“{" id ": 47 }') | +---------------------------------------------+ | [ 1、2、{" id ": 47岁 }] | +---------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE('{“a”:1、“b”:2  }', > '{ " ”:3,“c”:4});+--------------------------------------------------------------+ | JSON_MERGE_PRESERVE('{“a”:1、“b”:2}’,‘{“a”:3,“c”:4  }') | +--------------------------------------------------------------+ | {" “[1,3],”b: 2,“c”:4 } | +--------------------------------------------------------------+ mysql >选择JSON_MERGE_PRESERVE('{“a”:1、“b”:2},{“a”:3,“c”:4  }', > '{ " ”:5,“d”:6});+----------------------------------------------------------------------------------+ | JSON_MERGE_PRESERVE('{“a”:1、“b”:2}’,‘{“a”:3,“c”:4}’,‘{“d”:“一”:5日6  }') | +----------------------------------------------------------------------------------+ | {" “(1、3、5):,“b”:2,“c”:4,“d”:6 } | +----------------------------------------------------------------------------------+

此函数已在MySQL 5.7.22中添加为同义词json_merge()。这json_merge()函数现在已被弃用,并将在MySQL的未来版本中移除。

此功能类似但与之不同JSON_MERGE_PATCH ()在重要的方面;看到

JSON_REMOVE (json_doc小路(,小路] ...)

从JSON文档中删除数据并返回结果。回报如果有任何争论。如果存在错误json_doc参数不是有效的JSON文件或任何小路参数不是有效的路径表达式$或包含A.*或者* *通配符。

小路左右评估参数。通过评估一个路径产生的文档成为评估下一个路径的新值。

如果文档中不存在删除的元素,则不是错误;在这种情况下,路径不会影响文档。

mysql> SET @j = '["a", ["b", "c"], "d"]';mysql> SELECT JSON_REMOVE(@j, '$[1]');+-------------------------+ | JSON_REMOVE (@j”,[1美元 ]') | +-------------------------+ | [" ”、“d "] | +-------------------------+
  • json_replace(json_doc小路瓦尔(,小路瓦尔] ...)

    替换JSON文档中的现有值并返回结果。回报如果有任何争论。如果存在错误json_doc参数不是有效的JSON文件或任何小路参数不是有效的路径表达式或包含*或者* *通配符。

    将路径值对左右进行评估。通过评估一对产生的文档成为评估下一个对的新值。

    文档中的现有路径的路径值对将使用新值覆盖现有文档值。忽略文档中的非出版路径的路径值对并没有效果。

    为了比较JSON_INSERT ()JSON_REPLACE (),json_set(),见讨论json_set()

    mysql> SET @j = '{"a": 1, "b": [2,3]}';mysql>选择json_replace(@j,'$ .a',10,'$ .c','[true,false]');+-----------------------------------------------------+ | JSON_REPLACE (@j的美元。“10”$ c”、“[真的,假的 ]') | +-----------------------------------------------------+ | {" ”:10,“b”:[2,3 ]} | +-----------------------------------------------------+
  • json_set(json_doc小路瓦尔(,小路瓦尔] ...)

    在JSON文档中插入或更新数据并返回结果。回报如果有任何争论或者小路如果给定,则不会找到对象。如果存在错误json_doc参数不是有效的JSON文件或任何小路参数不是有效的路径表达式或包含*或者* *通配符。

    将路径值对左右进行评估。通过评估一对产生的文档成为评估下一个对的新值。

    文档中的现有路径的路径值对将使用新值覆盖现有文档值。如果路径标识以下类型的值之一,则文档中的非主体路径的路径值对将值添加到文档中:

    • 不存在于现有对象中的成员。将成员添加到对象中,并与新值相关联。

    • 超出现有数组尾部的位置。使用新值扩展数组。如果现有值不是数组,则将其自动包装为数组,然后使用新值进行扩展。

    否则,文档中不存在的路径的路径值对将被忽略,并且不会产生任何影响。

    json_set()JSON_INSERT (),JSON_REPLACE ()功能相关:

    以下示例说明了使用文档中存在的一个路径(美元。)另一个不存在(美元. c):

    mysql> SET @j = '{"a": 1, "b": [2,3]}';mysql> SELECT JSON_SET(@j, '$ ');A ', 10, '$.c', '[true, false]');+-------------------------------------------------+ | JSON_SET (@j的美元。“10”$ c”、“[真的,假的 ]') | +-------------------------------------------------+ | {" ”:10,“b”:[2、3],”c”:“(真的,假的 ]"} | +-------------------------------------------------+ mysql >选择JSON_INSERT (@j,”美元。A ', 10, '$.c', '[true, false]');+----------------------------------------------------+ | JSON_INSERT (@j的美元。“10”$ c”、“[真的,假的 ]') | +----------------------------------------------------+ | {" ”:1、“b”:[2、3],”c”:“(真的,假的 ]"} | +----------------------------------------------------+ mysql >选择JSON_REPLACE (@j,”美元。A ', 10, '$.c', '[true, false]');+-----------------------------------------------------+ | JSON_REPLACE (@j的美元。“10”$ c”、“[真的,假的 ]') | +-----------------------------------------------------+ | {" ”:10,“b”:[2,3 ]} | +-----------------------------------------------------+
  • JSON_UNQUOTE (json_val

    unquotes json值并将结果返回为autf8mb4细绳。回报如果参数是。如果值以双引号开始和结束,但不是有效的JSON字符串文字,则会发生错误。

    在一个字符串中,某些序列具有特殊意义,除非NO_BACKSLASH_ESCAPES启用S​​QL模式。每个序列都以反斜杠开始(\),被称为转义字符。MySQL认识到所示的转义序列表12.23," JSON_UNQUOTE()特殊字符转义序列"。对于所有其他转义序列,忽略反斜杠。也就是说,被逃脱的字符被解释为它不逃脱。例如,\X只是X。这些序列区分大小写。例如,\ B.被解释为退格符,但是\ B被解释为B.

    表12.23 json_unquote()特殊字符转义序列

    转义序列 由序列表示的字符
    \” 双重报价()字符
    \ B. 退格字符
    \F 一个形式的特征
    \ n 纽诺(LINEFEED)字符
    \ R. 回车符号
    \ 一个制表符
    \\ 一个反斜杠(\)字符
    \ U.XXXX. UTF-8字节用于Unicode值XXXX.

    下面给出了两个使用这个函数的简单例子:

    mysql> SET @j = '"abc"';mysql> SELECT @j, JSON_UNQUOTE(@j);+-------+------------------+ | @ j | JSON_UNQUOTE (@j ) | +-------+------------------+ | " 校正”|  | +-------+------------------+ mysql >设置@j = ' [1, 2, 3];mysql> SELECT @j, JSON_UNQUOTE(@j);+-----------+------------------+ | @ j | JSON_UNQUOTE (@j ) | +-----------+------------------+ | [ 1、2、3)|(1、2、3 ] | +-----------+------------------+

    下面的一组示例展示了如何做到这一点JSON_UNQUOTE处理逃,NO_BACKSLASH_ESCAPES禁用和启用:

    mysql>选择@@ sql_mode;+ ------------ + |@@ sql_mode |+ ------------ + ||+ ------------ + MySQL>选择JSON_UNQUOTE('“\\ T \\ U0032”');+ -------------------------- + |json_unquote('“\\ t \\ u0032”'')|+ -------------------------- + |2 | +------------------------------+ mysql> SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; mysql> SELECT JSON_UNQUOTE('"\\t\\u0032"'); +------------------------------+ | JSON_UNQUOTE('"\\t\\u0032"') | +------------------------------+ | \t\u0032 | +------------------------------+ mysql> SELECT JSON_UNQUOTE('"\t\u0032"'); +----------------------------+ | JSON_UNQUOTE('"\t\u0032"') | +----------------------------+ | 2 | +----------------------------+