0

目标:

  • 搜索字符串或字符串集的键实际名称值
  • 使用不区分大小写的值进行搜索
  • 返回包含值的对象

未经消毒的测试数据:

{
    "PassworD": "dashnd8",
    "Name": "Katy"
}
{
    "PasSWOrd": "DJNAS98das98",
    "Name": "Paulo"
}
{
    "Pa$$word": "H(AD*Sn",
    "Name": "Crissy"
    
}
{
    "PW": "nA(*DS",
    "Name": "Jamel"
    
}
{
    "pW": "0d9asm0i",
    "Name": "Denny"
}

净化测试数据:

{
    "Password": "PW",
    "Name": "Katy"
}
{
    "Password": "pW",
    "Name": "Paulo"
}
{
    "Password": "pw",
    "Name": "Crissy"
    
}
{
    "Password": "passWorD",
    "Name": "Jamel"
    
}
{
    "Password": "PAssword",
    "Name": "Denny"
}

注意:如果 json 对象具有不同的层次结构,请添加必要的步骤来访问您的数据

4

2 回答 2

0

要有效地清理对象流:

with_entries( if .key | ascii_downcase | IN("password", "pw", "pa$$word")
              then .key="Password" 
              else . end) 

要有效地选择而不清理结果:

select( any(keys_unsorted[] | ascii_downcase;
            IN("password", "pw", "pa$$word") ) )
于 2021-02-05T00:34:50.957 回答
-1

为了满足搜索,我们将使用以下内容:

  • select():选择我们将选择明确搜索的键
  • ascii_downcase:此修饰符对于您不知道键是否具有特定值的这些类型的搜索很有帮助。这将消除区分大小写,Tom vs tOm vs toM etc
  • contains(): 帮助搜索多个值

jq 'select( keys[]| ascii_downcase |contains( "pw","password"))'

BONUS:

但是,如果您想在更结构化的已清理数据中基于特定键搜索值,其中键名称明确相同,则可能是另一种搜索,您可以通过执行此操作来搜索值 ->

jq 'select( .Password| ascii_downcase |contains( "pw","password"))'

于 2021-02-04T22:55:01.660 回答