[英]jq - How do I print a parent value of an object when I am already deep into the object's children?
假設我有以下JSON,存儲在我的變量jsonVariable中 。
{
"id": 1,
"details": {
"username": "jamesbrown",
"name": "James Brown"
}
}
我使用以下代碼使用jq解析此JSON:
echo $jsonVariable | jq '.details.name | select(.name == "James Brown")'
這會給我輸出
詹姆斯布朗
但是如果我想得到這個人的身份怎么辦? 現在,我知道這是一個粗略而簡單的例子 - 我正在使用的程序是5或6級深度,除了select之外還有許多不同的JQ函數。 在執行各種過濾方法后,當我已經深入5或6層時,我需要一種方法來選擇父項的字段。
有人可以幫忙嗎? 是否有任何“反向”的方式,回到父母身邊? (不確定我是否有意義!)
對於更通用的方法,將“父”元素的值保存在所需的詳細級別,然后將其傳遞到過濾器的末尾:
jq '. as $parent | .details.name | select(. == "James Brown") | $parent'
當然,對於你揭露的瑣碎案例,你可以完全省略:
jq 'select(.details.name == "James Brown")'
另外,請考慮如果您選擇的過濾器為單個父對象返回許多匹配項,您將收到每個匹配項的父對象的副本。 您可能希望確保您的選擇過濾器僅通過將父級別下的所有匹配包裝到數組中而在父級別返回一個元素,或者使用unique
對最終結果進行重復數據刪除。
試一試:
echo $jsonVariable | jq '{Name: .details.name, Id: .Id} | select(.name == "James Brown")'
您可以查詢包含您要查詢的值的根對象以及您要選擇的值,而不是查詢您正在測試的值。
您需要包含id
和name
的對象。
$ jq --arg name 'James Brown' 'select(.details.name == $name).id' input.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.