Postgres正则表达式未按预期匹配逗号

时间:2017-11-30 05:24:44

标签: json regex postgresql

我有一个包含JSON的文本字段,我需要替换并删除一些字段。下面是JSON格式的示例。我想删除以' -op'为后缀的某些字段。和逗号,但逗号因某种原因没有被提取。

{
    "miscId":[],
    "otherActivityData":{"activityDate-op":"eq","activityDate":"11/28/2017"}
}

我使用了一个很好的在线工具来显示我的模式应该适用于大多数语言=> regexpal

模式是:

"activityDate-op":".+?",?

除了逗号之外,它会选择所有内容。我做了一个regexp_match并通过加注通知将其打印出来并生成了

{"\"activityDate-op\":\"eq\""}

任何人都可以帮忙指出我如何拿起逗号吗?

有时,field-op是数组中的最后一个,所以我需要有0或1个问号量词。如果我删除?然后它有时会选择逗号,但也会引起问题。

1 个答案:

答案 0 :(得分:0)

你不需要正则表达式。有operator根据元素的路径从JSONB中删除元素:

select j #- array['otherActivityData', 'activityDate-op']
from (
  values ( '{"miscId":[],
              "otherActivityData":{"activityDate-op":"eq","activityDate":"11/28/2017"}
            }'::jsonb) 
) as t(j);

返回:

{"miscId": [], "otherActivityData": {"activityDate": "11/28/2017"}}