【问题标题】:Get path expression of a value inside JSON data using case insensitive search using MySQL Json_search function使用 MySQL Json_search 函数使用不区分大小写的搜索获取 JSON 数据中值的路径表达式
【发布时间】:2019-03-30 00:46:48
【问题描述】:

我有一个要求,我需要从 JSON 数据中提取 JSON 路径表达式,按值搜索。

例如,如果我将 JSON 数据存储为

SET @j = '[{"name":"Kiran Muralee", "age" : 30 , "Salary" : 30000},
      {"Name":"Arun Babu", "age" : 35 , "Salary" : 60000}]';

如果我需要获取价值的 JSON 路径 'Arun Babu' 我可以使用

SELECT JSON_SEARCH(@j, 'all', 'Arun Babu');

这会导致

"$[1].Name"

这是对的,但问题是如果我使用值 'arun babu' 进行搜索,它会返回 NULL。所以我使用了不区分大小写的搜索

SELECT JSON_SEARCH(lower(@j), 'all', lower('arun babu'));

所以现在我得到的结果是

"$[1].name"

但这不是我需要的,因为现在结果也以小写形式输出,我需要结果是
“$[1].名称” 谁能提出一个好的解决方案或方法。

使用的 MySQL 版本是 5.7(支持 JSON 类型的版本)

【问题讨论】:

  • 我认为您需要在应用程序代码(例如:PHP)中以不区分大小写的方式使用来自 json_search 的结果键;使用相同的方法 (strtolower())
  • @MadhurBhaiya 但为此我需要将所有长 JSON 数据带入应用程序端(PHP)不是。是否可以使用 MySQL 查询本身来实现,并且只将结果返回到应用程序中。对不起,如果我弄错了您的评论。
  • 不,我不建议将完整的 JSON 带到应用程序端。只需获取结果(此处为键),并在 PHP 代码中以不区分大小写的方式使用它们。
  • @MadhurBhaiya 好的,但结果已经不区分大小写了。如果 JSON 中有另一个键,例如 nAMe,该怎么办。键 'Name' 和 'nAMe' 不一样,包含不同的值。所以再次如果需要在键'Name'中提取值,这是不可能的。
  • @MadhurBhaiya 你的意思是只使用不区分大小写的搜索的键(可能带有值)并在应用程序端进行小过滤以找出正确的键以供以后使用

标签: mysql json mysql-json


【解决方案1】:

我们可以通过使用不区分大小写的排序规则得到预期的解决方案:

SELECT JSON_SEARCH(@j , 'all', 'arun babu' COLLATE utf8mb4_general_ci);

db-fiddle

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2013-09-26
    相关资源
    最近更新 更多