[英]Extract fields from object present in multiple nested levels using jq
我有一個文本文件,其數據記錄如下:
{"input":{"payload":{"id":"rec1","var2":"imp_val1","var3":"","var4":"000000"},"recordName":"typeABC"}}
{"input":{"recordName":"typeBCD","payload":{"var5":"val_var66","recordType":"typeA","id":"rec2","var2":"imp_val2","var3":"","var4":"000000"}}}
{"recordName":"typeEFG","payload":{"var5":"val_var55","recordType":"typeA","id":"rec3","var2":"imp_val3","var3":"","var4":""}}
{"payload":{"id":"rec4","var2":"imp_val4","var3":"","var4":"000000"},"recordName":"typeABC"}
有一個記錄名稱和有效負載鍵,其中包含我感興趣的值。 一些記錄被包裝在另一個鍵輸入中。 我想從所有這些記錄中提取 id 和 var2 到一個新的 csv 文件中。
我想如果數據格式是統一的,我可以這樣做:
cat file | jq -r "[.payload.id, .payload.var2] | @csv" > newFile
或者
cat file | jq -r "[.input.payload.id, .input.payload.var2] | @csv" > newFile
任何指針?
由於payload
object 嵌套在每個 object 的多個級別中,因此您可以應用遞歸下降..
如果密鑰不存在則忽略
jq -r '..| .payload? // empty | [ .id, .var2 ] | @csv' file
順便說一句,我也認為以下工作:
jq -r 'if .input then .input.payload else .payload end | [.id, .var2] | @csv' file > newFile
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.