Junos REST APIには、次のJSONドキュメントがあります。選択したいくつかの項目に文書を縮小しようとしています。この目標をどのように達成できますか?
予想されるJSON:
[
{ "status": .member-status[0].data,
"serial": .member-serial-number[0].data,
"slot": .fpc-slot[0].data
},
...
]
生のJSON:
{
"member-status": [
{
"data": "Prsnt"
}
],
"member-id": [
{
"data": "0"
}
],
"fpc-slot": [
{
"data": "(FPC 0)"
}
],
"member-serial-number": [
{
"data": "serNo1"
}
],
"member-model": [
{
"data": "ex4400-24t"
}
],
"member-priority": [
{
"data": "255"
}
],
"member-mixed-mode": [
{
"data": "N"
}
],
"member-route-mode": [
{
"data": "VC"
}
],
"member-role": [
{
"data": "Master*"
}
],
"neighbor-list": [
{}
]
}
{
"member-status": [
{
"data": "NotPrsnt"
}
],
"member-id": [
{
"data": "1"
}
],
"fpc-slot": [
{
"data": "(FPC 1)"
}
],
"member-serial-number": [
{
"data": "serNo2"
}
],
"member-model": [
{}
]
}
答え1
次のようにする必要があります。
jq -s '
map(
{
"status": ."member-status"[0].data,
"serial": ."member-serial-number"[0].data,
"slot" : ."fpc-slot"[0].data
}
)' your-file.json
または、コードをもう少し細分化してみてください。
jq -s '
map({
"status": ."member-status",
"serial": ."member-serial-number",
"slot" : ."fpc-slot"
} | with_entries(.value |= .[0].data))' your-file.json
または、3つすべての単純化されたキーが2番目に分離された単語であるためです-
。
jq -s '
map({"member-status", "member-serial-number", "fpc-slot"} |
with_entries(.value |= .[0].data | .key |= split("-")[1]))' your-file.json
あなたのサンプルは以下を提供します。
[
{
"status": "Prsnt",
"serial": "serNo1",
"slot": "(FPC 0)"
},
{
"status": "NotPrsnt",
"serial": "serNo2",
"slot": "(FPC 1)"
}
]
-s
入力の複数のリンクされたJSONをJSON配列に結合して、指定されたオブジェクトmap()
を各メンバーにマップします。あるいは、配列メンバーを繰り返して結果から新しい配列を構築することもできmap({...})
ます。[ .[] | {...} ]