我在使用
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 中使用它的任何提示?
目前看来最好的解决方法是使用
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>