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

Oracle中使用REGEXP_REPLACE通用替换JSON指定字段值的方法

在JSON中批量替换指定字段的value值

需求说明

需要将JSON中name或surname字段对应的value值统一替换为XYZ,示例JSON如下:

{
  "app": {
    "value": "ff5aeb05-7a22-46fd"
  },
  "name": {
    "value": "John"
  },
  "surname": {
    "value": "Smith"
  }
}

当前使用regexp_replace直接替换固定字符串的方式缺乏通用性,无法批量处理符合条件的字段,以下是两种通用解决方案:


方案一:使用Oracle JSON专用函数(推荐)

利用Oracle的JSON处理函数精准定位字段修改,避免正则解析JSON的潜在问题:

固定字段直接修改(Oracle 12.2+支持json_transform)

SELECT json_transform(
    '{"app":{"value":"ff5aeb05-7a22-46fd"},"name":{"value":"John"},"surname":{"value":"Smith"}}',
    SET '$.name.value' = 'XYZ',
    SET '$.surname.value' = 'XYZ'
) AS updated_json
FROM dual;

此方法通过JSON路径直接指定修改目标,操作精准,不受JSON格式换行、空格变化影响。

动态批量匹配字段

如果需要匹配多个符合条件的字段(比如字段名包含特定关键字),可以先解析JSON为键值对,修改后重新聚合:

WITH json_data AS (
    SELECT '{"app":{"value":"ff5aeb05-7a22-46fd"},"name":{"value":"John"},"surname":{"value":"Smith"}}' AS original_json FROM dual
),
parsed_data AS (
    SELECT 
        key,
        CASE 
            WHEN key IN ('name', 'surname') THEN json_object('value' VALUE 'XYZ')
            ELSE value
        END AS modified_value
    FROM json_data,
         json_table(original_json, '$.*' COLUMNS 
             key VARCHAR2(100) PATH '$key',
             value JSON PATH '$'
         )
)
SELECT json_objectagg(key VALUE modified_value) AS updated_json
FROM parsed_data;

此方法扩展性强,只需修改CASE中的条件即可适配更多字段。


方案二:改进正则表达式(不推荐)

如果必须使用正则,可编写匹配目标字段的通用正则,避免硬编码具体值:

SELECT regexp_replace(
    '{"app":{"value":"ff5aeb05-7a22-46fd"},"name":{"value":"John"},"surname":{"value":"Smith"}}',
    '("(name|surname)":{"value":")([^"]+)("})',
    '\1XYZ\4'
) AS updated_json
FROM dual;

注意:此方法依赖JSON的格式稳定性,若JSON出现额外空格、换行或结构变化,正则可能失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:52:44