我正在使用一个 API(来自SyncroMSP),它返回分页的 JSON 数据。我可以获取页数,并且可以使用诸如 之类的工具获取数据curl
。每个块都是有效的 JSON,但它仅包含我需要的总数据的子集。
使用jq
或其他方式如何将tickets[]
这些分页数据块的元素合并回单个 JSON 文档?
以下是三个示例块。tickets[]
数组经过大量编辑,以解决此问题,实际上最多包含 25 个条目,并且每个票证条目包含更多元素,包括至少几个数组。
JSON 示例块 1 ( part_1.json
)
{
"tickets": [
{
"number": 4445,
"subject": "Your mailbox is almost full"
},
{
"number": 4444,
"subject": "Cannot VPN"
}
],
"meta": {
"total_pages": 3,
"page": 1
}
}
JSON 示例块 2 ( part_2.json
)
{
"tickets": [
{
"number": 4395,
"subject": "Trados Studio issue"
},
{
"number": 4394,
"subject": "Daily Backup Report(No Errors)"
}
],
"meta": {
"total_pages": 3,
"page": 2
}
}
JSON 示例块 3 ( part_3.json
)
{
"tickets": [
{
"number": 4341,
"subject": "Daily Backup Report(No Errors)"
},
{
"number": 4340,
"subject": "Windows Updates on VMs"
}
],
"meta": {
"total_pages": 3,
"page": 3
}
}
在这种情况下,预期结果将是这样的:
{
"tickets": [
{
"number": 4445,
"subject": "Your mailbox is almost full"
},
{
"number": 4444,
"subject": "Cannot VPN"
},
{
"number": 4395,
"subject": "Trados Studio issue"
},
{
"number": 4394,
"subject": "Daily Backup Report(No Errors)"
},
{
"number": 4341,
"subject": "Daily Backup Report(No Errors)"
},
{
"number": 4340,
"subject": "Windows Updates on VMs"
}
]
}
输出也可以包含哈希,因为我只是忽略它,并且哪个值被结转meta
并不重要。meta.page
您可以假设它tickets[].number
是唯一的,并且您不需要在该级别保留任何顺序tickets[]
。实际数据非常复杂,我不想在任何结果代码中声明完整的 JSON 结构。
这是我目前的尝试,但我对 并不是特别擅长jq
。有没有更好的方法 - 例如,不调用jq
两次,或者能够概括代码,这样我就不需要指定顶级数组的名称(tickets
)?
cat part_{1,2,3}.json | jq '.tickets[]' | jq -n '{ tickets:[ inputs ] }'