我需要清理JSON数据,如下所示:
{
"reference":"0000010-CAJ",
"product_code":"00000-10",
"var_name":"CAJ-1",
"doc_date":"2020-02-09T21:01:01-05:00",
"due_date":"2020-03-10T21:01:01-05:00",
}但是,这只是许多其他可能性中的一种(适用于从许多来源获取数据的日志聚合)。
我需要将"-“替换为"_",但不能中断"2020-03-10T21:01:01-05:00”这样的日期,因此不能简单地转换为字符串并进行替换。我想知道是否存在等同于:
for (k,v) in json:
if is_text(v):
v = replace(...)发布于 2020-08-25 03:01:14
您可以使用正则表达式检查该值是否类似于时间戳:
update the_table
set the_column = (select
jsonb_object_agg(
key,
case
when value ~ '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.*' then value
else replace(value, '-', '_')
end)
from jsonb_each_text(the_column) as t(key, value))这将迭代JSON列中的所有键/值对(使用jsonb_each_text()),并再次将它们组装回JSON (使用jsonb_object_agg())。看起来像时间戳的值保持不变,对于所有其他值,-被替换为_。
https://stackoverflow.com/questions/63565254
复制相似问题