json - 屏蔽 json 值内的特定数据
问题描述
我必须屏蔽与 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;
解决方案
考虑下面的例子
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;
带输出
推荐阅读
- r - 根据条件删除R中矩阵的行
- class - 使用 Jenkins 共享库作为类
- android - Android工作室中的图像排序
- c# - wpf小吃栏不显示消息
- python - 如何在 keras python 中构建一维卷积神经网络?
- vue.js - Vue.js v-bind:值到空对象
- java - 来自 n 个列表的笛卡尔积
- vue.js - 继承父上下文的 vuejs 组件
- selenium-webdriver - 无法使用 Serenity 在 BrowserStack 上进行测试并在本地计算机上启动 WebTest
- android - 如何在没有 WallpaperManager 的情况下设置墙纸