屏蔽 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?您的预期输出是什么? 是的,我将通过IPname 代替_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 值内的特定数据的主要内容,如果未能解决你的问题,请参考以下文章

Netezza CSV 加载忽略值内的逗号

根据以数组形式存在于对象值内的值搜索对象数组

通过值之间的逗号拆分字符串并忽略值内的逗号

获取array1的值,指定array1的值内的数组值[重复]

修复 SQL 中的无效 json

如何在 MySQL 中的 JSON 数组内的元素中提取特定属性的所有值?