屏蔽 json 值内的特定数据
Posted
技术标签:
【中文标题】屏蔽 json 值内的特定数据【英文标题】:Masking the specific data inside the json value 【发布时间】:2021-02-23 12:59:19 【问题描述】:我必须屏蔽IP和名称对应的数据。但是,屏蔽函数将 '\\2' 视为文本并对其应用屏蔽,而不是引用实际值。
with a as (
select (' "Category": "test","abc": "IP": "2401:4900:52f0:304a:34cd:93e6:ea31:3cce", "xyz": "name": "Sai"') as json
)
select
*,
regexp_replace(json, r'("_nanoseconds": )([":0-9a-zA-Z ]+)', concat('\\1',TO_HEX(md5('\\2')))) as dummy_json
dummy_json
from a;
【问题讨论】:
在这种情况下_nanoseconds
是什么?你的意思是IP
?您的预期输出是什么?
是的,我将通过IP
和name
代替_nanoseconds
。 @Mikhail 共享了查询和输出,这是我的预期输出。
【参考方案1】:
考虑下面的例子
create temp function mask_json(json string, key string) as (
replace (json,
regexp_extract(json, r'"' || key || '": "[^""]+"'),
concat('"' || key || '": "' || to_hex(md5(regexp_extract(json, r'"' || key || '": "([^""]+)"'))) || '"')
));
with a as (
select (' "Category": "test","abc": "IP": "2401:4900:52f0:304a:34cd:93e6:ea31:3cce", "xyz": "name": "Sai"') as json
)
select
mask_json(mask_json(json, 'IP'), 'name') masked_json
from a;
有输出
【讨论】:
以上是关于屏蔽 json 值内的特定数据的主要内容,如果未能解决你的问题,请参考以下文章