繁体   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