开发者社区> 问答> 正文

JSON_Search()返回null

已解决

我有一个查询问题。在我的数据库中,我有一个字段,其中包含以下格式的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可以很好地工作。非常感谢。

展开
收起
保持可爱mmm 2019-12-12 15:39:34 1958 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

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

        JSON_SEARCH(json_doc,one_or_all,search_str [,escape_char [,path] ...])
    
        返回JSON文档中给定字符串的路径。
    

    我把字符串这个词加粗了。如果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]" | +-----------+

    PS:请不要使用后缀“ indice”。没有这个词。 问题来源于stack overflow

    2019-12-12 15:40:08
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载