jq:piglatin风格的flatten函数

wbrvyc0a  于 2021-06-24  发布在  Pig
关注(0)|答案(2)|浏览(386)

我一直在寻找一个相当具体的功能,可能不存在于 jq . 如果您知道它不在那里,我将非常感谢您的通知和一些建议来解决这个问题。
我正在处理一个公共数据集。我已设法将数据缩减为以下行格式:

[field1,field2,field3,[author1,...,authorN],[author_type1,...,author_typeN]]

我用于获取此格式的bash命令如下所示:

find aps-dataset-metadata_subdir_path/ -name '*.json' | \
xargs cat | \
jq --compact-output \
    'select(.authors != null) | [.identifiers.doi, .date, .journal.id, [.authors[].name], [.authors[].type]]'

请注意 authorN 以及 author_typeN 在原始数据的同一对象中(即具有相同的父对象)。
我一直在寻找一种方法,从每一条生产线生产以下产品:

[field1,field2,field3,author1,author_type1]
[field1,field2,field3,author2,author_type2]
...
...
[field1,field2,field3,authorN,author_typeN]

中的展平函数 jq 似乎是水平扁平化,而不产生新的名单。如果你们中的一些人知道piglatin,我想要的正是piglatin内置的flatten操作符。
我再次意识到,它可能没有在欧洲得到实施 jq . 在这种情况下,我可能会在 Python 或者你们在答案中建议的任何其他很棒的方式。
非常感谢你!

blpfk2vs

blpfk2vs1#

jeff建议使用一步方法是有道理的,但是如果必须转换数组 [field1,field2,field3,[author1,...,authorN],[author_type1,...,author_typeN]] 到窗体的数组流 [field1,field2,field3,authorI,author_typeI] 那么合适的jq过滤器是:

.[0:2] + ([.[3], .[4]] | transpose[])
nnvyjq4y

nnvyjq4y2#

与其用不同的表达式分别遍历作者,不如只遍历一次作者。您可以将结果放入变量中,稍后再访问它们。

select(.authors != null) | .authors[] as $author |
    [ .identifiers.doi, .date, .journal.id, $author.name, $author.type ]

相关问题