使用 jq 对 JSON 进行反规范化
denormalizing JSON with jq
我有 JSON 看起来像这样:
[
{
"fields": {
"versions": [
{
"id": "36143",
"name": "ST card"
},
{
"id": "36144",
"description": "Acceptance test card",
"name": "AT card"
}
],
"severity": {
"value": "B-Serious",
"id": "14231"
}
}
},
{
"fields": {
"versions": [
{
"id": "36145",
"name": "ST card"
}
],
"severity": {
"value": "C-Limited",
"id": "14235"
}
}
}
]
我想用 jq 将其转换为:
[
{
"id": "36143",
"name": "ST card"
"value": "B-Serious"
},
{
"id": "36144",
"name": "AT card"
"value": "B-Serious"
},
{
"id": "36145",
"name": "ST card"
"value": "C-Limited"
}
]
请注意,第一个对象有 2 个版本,并且严重性相同。我试过 jq 的 group_by 和 map 函数,但不太成功。请帮助:)
这应该有效。你不会想在这里使用 group_by
,如果你想从多到少,你会这样做,我们正在走另一条路。
您正在将具有相应严重性的不同版本组合在一起。以下是您可以如何做到这一点。
map(.fields | (.versions[] | { id, name }) + { value: .severity.value })
我有 JSON 看起来像这样:
[
{
"fields": {
"versions": [
{
"id": "36143",
"name": "ST card"
},
{
"id": "36144",
"description": "Acceptance test card",
"name": "AT card"
}
],
"severity": {
"value": "B-Serious",
"id": "14231"
}
}
},
{
"fields": {
"versions": [
{
"id": "36145",
"name": "ST card"
}
],
"severity": {
"value": "C-Limited",
"id": "14235"
}
}
}
]
我想用 jq 将其转换为:
[
{
"id": "36143",
"name": "ST card"
"value": "B-Serious"
},
{
"id": "36144",
"name": "AT card"
"value": "B-Serious"
},
{
"id": "36145",
"name": "ST card"
"value": "C-Limited"
}
]
请注意,第一个对象有 2 个版本,并且严重性相同。我试过 jq 的 group_by 和 map 函数,但不太成功。请帮助:)
这应该有效。你不会想在这里使用 group_by
,如果你想从多到少,你会这样做,我们正在走另一条路。
您正在将具有相应严重性的不同版本组合在一起。以下是您可以如何做到这一点。
map(.fields | (.versions[] | { id, name }) + { value: .severity.value })