DB2中解析JSON字段时JSON_VALUE函数报错问题咨询
问题根因
- DB2内置JSON解析器严格遵循RFC 8259标准,要求JSON对象的键名必须使用双引号包裹,你测试语句中使用的
{a:100}属于非标准JSON格式,无法被正常解析 - Oracle的JSON相关函数对非标准JSON做了额外兼容,因此同逻辑语句可以在Oracle侧正常执行,DB2侧会触发解析错误,触发你配置的
ON ERROR分支返回Not Found,未配置默认值时就返回NULL
修复方法
将测试语句中的JSON字符串修改为标准格式,给键名添加双引号即可,修正后的SQL如下:
SELECT CURRENT TIMESTAMP AS CURRENT_TIMESTAMP, JSON_VALUE('{"a":100}', '$.a' DEFAULT 'Not found' ON ERROR) AS JSON_PARSE FROM SYSIBM.SYSDUMMY1
执行修正后的语句,JSON_PARSE字段会正常返回数值100。
如果实际业务场景中获取到的JSON本身就是无引号键名的非标准格式,可以先通过REPLACE等字符串处理函数补全键名的双引号后,再调用JSON解析函数处理即可。
内容的提问来源于stack exchange,提问作者hadoo
相关产品推荐
相关产品推荐

