JSON_Search()返回null

时间:2019-12-11 19:21:14

标签: mysql sql json

查询有问题。在我的数据库中,我有一个字段,其中包含具有以下格式的JSON:

[[0, 16, 22, 37, 0, 0, 0, 71, 82], 
[0, 18, 0, 36, 43, 0, 60, 0, 88], 
[9, 10, 0, 0, 0, 58, 69, 77, 0]]

使用此查询

SELECT JSON_SEARCH(NumeriJSON, 'all', 77,null, '$[*]') AS Indice FROM Cartella WHERE JSON_CONTAINS(NumeriJSON->'$[*]', '77')

我想获取JSON中数字的位置,但是它返回null。为什么? JSON的结构是有效的,因为JSON_CONTAINS可以很好地工作。 非常感谢。

1 个答案:

答案 0 :(得分:0)

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-search说:

  
      
  • JSON_SEARCH(json_doc,one_or_all,search_str [,escape_char [,path] ...])

         

    返回JSON文档中给定 string 的路径。

  •   

我加粗了 string 一词。如果您的JSON中的值为整数,则JSON_SEARCH()不起作用。

如果您使它们成为字符串,您的示例将起作用:

insert into Cartella (NumeriJson) values (
  '[["0", "16", "22", "37", "0", "0", "0", "71", "82"],
    ["0", "18", "0", "36", "43", "0", "60", "0", "88"],
    ["9", "10", "0", "0", "0", "58", "69", "77", "0"]]');

mysql> select json_search(numerijson, 'all', '77', null, '$[*]') as `index`
    from cartella where json_contains(numerijson->'$[*]', '"77"');
+-----------+
| index     |
+-----------+
| "$[2][7]" |
+-----------+

P.S。请不要使用后缀“ indice”。没有这个词。