簡體   English   中英

JSON 如何搜索鍵名值並打印包含不區分大小寫的字符串或字符串集的對象?

[英]JSON How to search keys name value and print the objects that contains a string or set of strings with case insensitivity?

目標:

  • 搜索字符串或字符串集的鍵實際名稱值
  • 使用不區分大小寫的值進行搜索
  • 返回包含值的對象

未經消毒的測試數據:

{
    "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 object 有不同的層次結構,請添加必要的步驟來訪問您的數據

要有效地清理對象的 stream:

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

有效地發送到 select,而無需清理結果:

select( any(keys_unsorted[] | ascii_downcase;
            IN("password", "pw", "pa$$word") ) )

為了滿足搜索,我們將使用以下內容:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM