能否简化指定jq映射代码?消除变量赋值实现TSV输出
简化jq代码实现key与source_records配对输出TSV
场景与现有代码
给定JSON数据:
{ "key": "/books/OL1000072M", "source_records": [ "ia:daywithtroubadou00pern", "bwb:9780822519157", "marc:marc_loc_2016/BooksAll.2016.part25.utf8:103836014:1267" ] }
现有jq代码实现将key与每个source_records元素配对输出TSV:
jq -r '.key as $olid | .source_records | map([$olid, .])[] | @tsv'
需求:消除变量赋值,简化代码逻辑。
简化后的代码
可以直接遍历source_records的元素,同时引用上层上下文的key字段,无需单独赋值变量:
jq -r '.source_records[] | [.key, .] | @tsv'
说明
- 遍历
.source_records[]时,当前上下文是数组中的单个元素,但jq的作用域允许访问上层对象的字段,因此.key依然指向原JSON的key值。 - 对每个元素构造
[.key, .]数组后,通过@tsv转换为制表符分隔的两列输出,效果与原代码完全一致。
内容的提问来源于stack exchange,提问作者Tom Morris
相关产品推荐
相关产品推荐

