You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JSON_VALUE解析含未转义内部双引号的JSON字符串?

解决JSON_VALUE查询无效JSON返回NULL的问题

你的示例JSON属于格式无效的JSON——Message字段值里的双引号没有按JSON规范转义,正常JSON要求字符串内部的双引号必须用反斜杠转义(写成\"),无效的JSON结构会让JSON_VALUE无法解析,直接返回NULL。

下面是不同数据库下的处理方案:

SQL Server 处理方式

如果没法提前修正JSON的写入格式,可以先通过字符串替换转义未处理的双引号,再执行查询:

SELECT JSON_VALUE(
    REPLACE(params, '"', '\"'),
    '$.Message'
) AS Message
FROM your_table

注意:这种简单替换可能会误转义JSON结构本身的引号(比如键名的引号),如果你的JSON只有字段值里存在未转义的引号,这个方法可以临时解决问题。

更稳妥的方式是用OPENJSON,它对轻微格式错误的兼容性更好:

SELECT j.Message
FROM your_table
CROSS APPLY OPENJSON(params)
WITH (
    Sender NVARCHAR(100),
    Event NVARCHAR(100),
    EventDate DATE,
    Message NVARCHAR(MAX)
) j

MySQL 处理方式

MySQL中可以结合REPLACE和JSON函数来处理:

SELECT JSON_UNQUOTE(
    JSON_EXTRACT(
        REPLACE(params, '"', '\\"'),
        '$.Message'
    )
) AS Message
FROM your_table;

-- 用简化运算符的写法
SELECT REPLACE(params, '"', '\\"')->>'$.Message' AS Message
FROM your_table;

最佳建议

最省心的方式是在数据写入数据库前就保证JSON格式合法,用标准的JSON序列化工具(比如Python的json模块、Java的Jackson框架)生成JSON,它们会自动处理字符串内的特殊字符转义,从根源避免这类问题。

内容的提问来源于stack exchange,提问作者john

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:32:14