次のように、カールから返されたJSON配列があります。
[
{
"title": "Some Title",
"tags":"tagA tag-B tagC"
},
{
"title": "Some Title 2",
"tags":"tagA tagC"
},
...
]
それに変換したいのですが…
[
{
"title": "Some Title",
"tags":["tagA",
"tag-B",
"tagC"]
},
{
"title": "Some Title 2",
"tags":["tagA",
"tagC"]
},
...
]
これまで私は以下を持っています:
(map(select(.tags!=null)) | map(.tags | split(" "))) as $tags | $tags
これは私に次のようなものを与えるようです:
[
[
"tagA",
"tag-B",
"tagC"
],
[
"tagA",
"tagC"
]
]
.tags
しかし、元のオブジェクトの元の値を持つ配列として提供する出力に再編成することはできないようです...
ベストアンサー1
あなたは状況を実際よりもはるかに複雑にしています。ただ使用map()
して|=
:
jq 'map(.tags |= split(" "))' file.json
編集する:
次の方法でアイテムを処理したい場合tags
:
jq 'map(try(.tags |= split(" ")))' file.json
または、すべてのアイテムを変更せずに維持したい場合tags
:
jq 'map(try(.tags |= split(" ")) // .)' file.json
結果:
[
{
"tags": [
"tagA",
"tag-B",
"tagC"
],
"title": "Some Title"
},
{
"tags": [
"tagA",
"tagC"
],
"title": "Some Title 2"
}
]