具有(简化的) Jira数据的JSON,如:
{
"issues": [
{
"key": "TEST-A",
"fields": { "issuelinks": [] }
},
{
"key": "TEST-B",
"fields": {
"issuelinks": [
{ "inwardIssue": { "key": "TEST-1" } },
{ "outwardIssue": { "key": "TEST-2" } },
{ "outwardIssue": { "key": "TEST-3" } }
]
}
}
]
}想要得到如下的输出:
[
{ "key": "TEST-A", "inward": null, "outward": null },
{ "key": "TEST-B", "inward": ["TEST-1"], "outward": ["TEST-2", "TEST-3"] }
]尝试(暂时忽略内部链接):
cat data.json | \
jq '.issues[] | {"key":.key, "outward":.fields.issuelinks[].outwardIssue.key }'但我明白:
{ "key": "TEST-B", "outward": "TEST-1" }
{ "key": "TEST-B", "outward": "TEST-2" }
{ "key": "TEST-B", "outward": null }注意:最后一个应该是TEST-A,前两个是TEST-2和TEST-3,并且希望将TEST-2和TEST-3组合在一个数组中。
有什么建议吗?
发布于 2018-11-21 19:58:10
让我们从您第一次尝试的变体开始:
.issues[]
| {key,
inward: .fields.issuelinks|map(.inwardIssue.key // empty),
outward: .fields.issuelinks|map(.outwardIssue.key // empty) }使用您的示例,这将生成:
{"key":"TEST-A","inward":[],"outward":[]}
{"key":"TEST-B","inward":["TEST-1"],"outward":["TEST-2","TEST-3"]}因此,要达到规定的目标,需要进行两次修复:
(2)不确定,但易于实现,例如使用下面定义的辅助函数。
解决方案
def extract(f): map(f // empty) | if length ==0 then null else . end;
.issues
| map(
{key,
inward: .fields.issuelinks|extract(.inwardIssue.key),
outward: .fields.issuelinks|extract(.outwardIssue.key)})警告
如果extract应该保留null和false值,那么它的def应该进行相应的修改。
https://stackoverflow.com/questions/53416372
复制相似问题