我一直在寻找一个相当具体的功能,可能不存在于 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
或者你们在答案中建议的任何其他很棒的方式。
非常感谢你!
2条答案
按热度按时间blpfk2vs1#
jeff建议使用一步方法是有道理的,但是如果必须转换数组
[field1,field2,field3,[author1,...,authorN],[author_type1,...,author_typeN]]
到窗体的数组流[field1,field2,field3,authorI,author_typeI]
那么合适的jq过滤器是:nnvyjq4y2#
与其用不同的表达式分别遍历作者,不如只遍历一次作者。您可以将结果放入变量中,稍后再访问它们。