在 MariaDB 中使用 JSON_TABLE 取消转义 JSON 字符串

问题描述 投票:0回答:1

我在使用

MariaDB 10.6.5
中的 JSON_TABLE 功能时遇到问题。这是我的查询:

SET @data = '[{"Data": "<root language=\\"de\\"></root>"}]';

SELECT
  data
FROM JSON_TABLE (@data, '$[*]' COLUMNS (data text PATH '$.Data')) AS t;

我返回的是 XML 字符串,但没有正确转义:

<root language=\"de\"></root>

当我用 then

JSON_VALUE
代替时:

SET @data = '[{"Data": "<root language=\\"de\\"></root>"}]';

SELECT
  JSON_VALUE(@DATA, '$[0].Data');

然后我得到正确的未转义字符串:

<root language="de"></root>

当我在 MySQL 8.0.26 服务器上执行相同操作时,它按预期工作:

SET @data = '[{"Data": "<root language=\\"de\\"></root>"}]';

SELECT
  data
FROM JSON_TABLE (@data, '$[*]' COLUMNS (data text PATH '$.Data')) AS t;

-- correct:
-- <root language="de"></root>

SELECT
  JSON_VALUE(@data, '$[0].Data');

-- correct:
-- <root language="de"></root>

在我看来,这种行为差异是 MariaDB 方面的一个错误。关于如何在 MariaDB 中使用它的任何提示?

sql mariadb mariadb-10.6
1个回答
0
投票

目前看来最好的解决方法是使用

REPLACE
删除邪恶的反斜杠。

根据您的示例:

SET @data = '[{"Data": "<root language=\\"de\\"></root>"}]';

SELECT
  REPLACE(data, "\\", "") as data
FROM JSON_TABLE (@data, '$[*]' COLUMNS (data text PATH '$.Data')) AS t;

返回:

<root language="de"></root>
© www.soinside.com 2019 - 2024. All rights reserved.