簡體   English   中英

使用 jq 從存在於多個嵌套級別中的 object 中提取字段

[英]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

jqplay - 在線演示

順便說一句,我也認為以下工作:

jq -r 'if .input then .input.payload else .payload end | [.id, .var2] | @csv' file > newFile

暫無
暫無

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

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