【问题标题】:MariaDB extract values with escaped characters from JSON DocumentMariaDB 从 JSON 文档中提取带有转义字符的值
【发布时间】:2022-06-14 23:40:44
【问题描述】:

我正在使用 json_value 函数从传递给 Mariadb 数据库的 json 文档中提取值。当文档包含带有转义值的名称/值对时,例如 "Item_Name":"60\" Table" 该函数仅提取 60 并为文档中的其余名称/值对返回空值。这是一个示例

Set @json = '{"Item_Name":"60\" Table", "Item_ID":"1"}';

select json_value(@json,'$.Item_Name') as Item_Name
, json_value(@json,'$.Item_ID') as ID

这个查询的结果是:

Item_Name ID
60 null

不确定如何使用转义字符提取值。

【问题讨论】:

    标签: sql json mariadb


    【解决方案1】:

    我也在 Mariadb 社区中发布了这个问题,并在那里得到了答案。诀窍是添加一个额外的转义字符。 Ian Gilfillan 在 Mariadb 社区中提供了答案,他的回复链接如下。

    https://mariadb.com/kb/en/extract-values-with-escaped-characters-from-json-document/+comments/5799#comment_5799

    引用:

    您需要使用两个转义字符。一次逃脱将是 由 SQL 解析器应用,但您想传递转义的字符串 下。所以:

    Set @json = '{"Item_Name":"60\\" Table", "Item_ID":"1"}';
    
    select json_value(@json,'$.Item_Name') as Item_Name ,
    json_value(@json,'$.Item_ID') as ID;
    
    +-----------+------+
    | Item_Name | ID   |
    +-----------+------+
    | 60" Table | 1    |
    +-----------+------+
    

    【讨论】:

      【解决方案2】:

      我今天偶然发现了这个问题,目前看来这会使整个 dbms 对我无法使用。我有通过 Web 服务从 MS SQL Server 机器接收到的有效 JSON 文档,但我无法处理它们,因为 MariaDB 将它们视为无效。它们肯定是有效的 JSON,并在 SQL Server 以及任何 JSON 解析器中验证。例如。下面的文档是有效的 JSON,应该这样对待。

      SET @json = '{"x": "\n"}'; 
      SELECT JSON_VALID(@json);
      

      但是输出是:

      'JSON_VALID(@json)'
      ----------------------
      0
      

      实际发生的情况是,SQL 解析器无缘无故地取消转义 JSON,从而使 JSON 无效。这似乎真的是一团糟。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-24
        • 2014-04-03
        • 1970-01-01
        • 2014-04-17
        • 1970-01-01
        • 1970-01-01
        • 2021-06-08
        相关资源
        最近更新 更多