首页 > 解决方案 > 调用 MySQL JSON 函数,传入表示数字属性的路径

问题描述

我有一个 JSON 块,其中一个属性是一个数字。例如{"123": "1"}. 但我似乎无法让它与 MySQL 的JSON_CONTAINS函数一起使用。我还尝试了具有相同结果的JSON_CONTAINS_PATH函数。

以下作品:

SELECT JSON_CONTAINS('{"a": 1}', '1', '$.a');

但是以下给了我一个错误:

SELECT JSON_CONTAINS('{"123": 1}', '1', '$.123');

查询错误:错误:ER_INVALID_JSON_PATH:无效的 JSON 路径表达式。错误在字符位置 5 附近。

我已经阅读了文档:https ://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-contains ,但提供的示例仅使用字符串作为属性。

必须有办法做到这一点。我正在使用 MySQL 8.0.11

标签: mysqljson

解决方案


您可以使用以下双引号将密钥名称:

SELECT JSON_CONTAINS('{"123": 1}', '1', '$."123"');

对于 MySQL JSON 函数中使用的路径,范围始终是正在搜索或以其他方式操作的文档,由前导 $ 字符表示。路径腿由句点字符 (.) 分隔。数组中的单元格由 表示[N],其中N是一个非负整数。键名必须是双引号字符串或有效的 ECMAScript 标识符(参见http://www.ecma-international.org/ecma-262/5.1/#sec-7.6)。

来源: https ://dev.mysql.com/doc/refman/8.0/en/json.html#json-path-syntax


后跟键名的句点使用给定键命名对象中的成员。如果不带引号的名称在路径表达式中不合法(例如,如果它包含空格),则必须在双引号内指定键名称。

来源: https ://dev.mysql.com/doc/refman/8.0/en/json.html#json-paths


推荐阅读