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

H2数据库中如何将JSON字符串值转为无引号的VARCHAR?

解决H2 2.2.220中JSON字符串列转无引号VARCHAR的规范方法

核心方案:用JSON_VALUE函数解析提取

H2支持标准的JSON_VALUE函数,专门用于解析JSON类型并提取原始字符串值,这是处理JSON内容的合规方式,能彻底避免暴力修剪带来的误处理问题。

实操示例

  1. 创建测试表并插入多场景数据:
create table my_table (
    id        int generated by default as identity,
    my_json   JSON null default null
);

-- 普通字符串
insert into my_table (my_json) values (JSON '"abcdef"');
-- 首尾含合法双引号的字符串
insert into my_table (my_json) values (JSON '"xyz\""');
  1. 执行规范提取:
select JSON_VALUE(my_json, '$') from my_table;

返回结果:

  • 第一条数据:abcdef(正确移除JSON字符串的外层引号)
  • 第二条数据:xyz"(保留了原始字符串内的合法双引号,无错误修剪)

其他方法的问题说明

  • 直接查询/CAST转换:H2的JSON类型转VARCHAR时,会输出完整的JSON文本表示(包含字符串的外层双引号),所以结果必然带引号。
  • BTRIM暴力修剪:BTRIM(my_json, '"')会移除字符串首尾所有匹配的引号字符,当原始字符串本身首尾包含双引号时,会错误地将这些合法引号也剔除,导致数据损坏。

补充提示

JSON_VALUE的第二个参数是JSON路径表达式,用'$'表示提取整个JSON值(适用于你的列存储单个JSON字符串的场景)。如果JSON结构更复杂,还可以通过路径提取嵌套内容,比如JSON_VALUE(my_json, '$.username')提取对象中的username字段值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:52:43