次のコードスニペットをJSONにエクスポートします。
{
"daisy": {
"dev": {
"app_url": "example.com",
"owner": "bob",
"createat": "2022-06-17T15:31:58Z",
}
}
}
{
"daisy": {
"dev": {
"appname": "daisy",
"flavor": [
"nodejs"
],
"file": "manifests/daisy.yml"
}
}
}
私はこれらのオブジェクトを次のように結合したいと思います:
{
"daisy": {
"dev": {
"app_url": "example.com",
"owner": "bob",
"createat": "2022-06-17T15:31:58Z",
"appname": "daisy",
"flavor": [
"nodejs"
],
"file": "manifests/daisy.yml"
}
}
}
どうすればいいですかjq
?
ベストアンサー1
2 つのオブジェクトを乗算するとマージされます。以下は、reduce
既存のオブジェクトを 1 つずつマージして、常に新しいオブジェクトを作成するために使用されます。
これを行う2つの同様の方法があります。
使用
-n
とinputs
:reduce
jq -n 'reduce inputs as $item ({}; . *= $item)' file
inputs
渡されたオブジェクトを1つずつ返す関数を使用します。 ()と-n
一緒に使用すると、--null-input
一般的な入力読み取りを無効にできます。使用
-s
と.[]
:reduce
jq -s 'reduce .[] as $item ({}; . *= $item)' file
これは、生データ
-s
(--slurp
)を配列として読み込み、reduce
配列を繰り返すために使用されます。入力が大きいと、メモリが非常に非効率的で速度が遅くなる可能性があります。
データの結果(createat
行からカンマを削除して修正):
{
"daisy": {
"dev": {
"app_url": "example.com",
"owner": "bob",
"createat": "2022-06-17T15:31:58Z",
"appname": "daisy",
"flavor": [
"nodejs"
],
"file": "manifests/daisy.yml"
}
}
}
複数のオブジェクトが同じキーを共有し、そのキースカラーまたは大量にこの場合、入力の後続のオブジェクトはこの値を上書きします。