JSON如何搜索键名称值并打印包含不区分大小写的字符串或字符串集的对象?

JSON如何搜索键名称值并打印包含不区分大小写的字符串或字符串集的对象?,json,output,jq,data-objects,Json,Output,Jq,Data Objects,目标: 在键的实际名称值中搜索一个字符串或一组字符串 使用不区分大小写的值进行搜索 返回包含值的对象 未消毒试验数据: { "PassworD": "dashnd8", "Name": "Katy" } { "PasSWOrd": "DJNAS98das98", "Name": "Paulo" } {

目标:

  • 在键的实际名称值中搜索一个字符串或一组字符串
  • 使用不区分大小写的值进行搜索
  • 返回包含值的对象
未消毒试验数据:

{
    "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"
}
消毒试验数据:

{
    "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对象具有不同的层次结构,请添加访问数据的必要步骤,以满足搜索要求,我们将使用以下方法:

  • select()
    :选择要显式搜索的键
  • ascii\u downcase
    :此修饰符对于不知道键是否具有特定值的搜索类型很有帮助。这将消除大小写敏感性,即
    Tom vs Tom vs Tom等
  • contains()
    :帮助搜索多个值
jq'select(键[]| ascii | downcase |包含(“密码”))”

奖金:

但是,另一种搜索可能是,如果要在更结构化的净化数据中搜索基于特定键的值,其中键名显式相同,则可以通过执行此操作来搜索值->


jq'选择(.Password | ascii|u downcase | contains(“pw”,“Password”))”

有效地清理对象流:

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") ) )

请澄清“说明:”的含义和含义。特别是,“您的”指的是谁?请注意,
包含(“pw”,“password”)
通常会返回两个值,因此
“pw是password的缩写”|选择(包含(“pw”,“password”))
也会返回两个值。