5

次の入力があるとします (これは、別の複雑なクエリの 10 万以上のオブジェクトを含む出力のトーンダウン バージョンです)。

echo '{ "a": { "b":"c", "d":"e" } }{ "a": { "b":"f", "d":"g" } }' | jq '.'
{
  "a": {
    "b": "c",
    "d": "e"
  }
}
{
  "a": {
    "b": "f",
    "d": "g"
  }
}

望ましい出力:

{
   "c": "e",
   "f": "g"
}

または(フォローアップの使用に適しています):

{
   x: {
      "c": "e",
      "f": "g"
   }
}

私は一生、それを行う方法を理解することはできません。もちろん、私の本当の問題は複数のオブジェクト入力データであり、それが有効な JSON であるかどうかは本当にわかりません。Jq は生成して受け入れますが、json は受け入れません。さまざまな可能性を試しましたが、どれも必要なものを生成しませんでした。私はこれが最も可能性の高い候補だと考えました:

echo '{ "a": { "b":"c", "d":"e" } }{ "a": { "b":"f", "d":"g" } }' | jq ' . | { (.a.b): .a.d }'
{
   "c": "e"
}
{
   "f": "g"
}

しかし悲しいかな。私が試した他のこと:

' . | { x: { (.a.b): .a.d } }'
'{ x: {} | . | add }'
'{ x: {} | . | x += }'
'{ x: {} | x += . }'
'x: {} | .x += { (.a.b): .a.d }'
'{ x: {} } | .x += { (.a.b): .a.d }'

別のもの、近いですが、シガーはありません:

'reduce { (.a.b): .a.d } as $item ({}; . + $item)'
{
  "c": "e"
}
{
  "f": "g"
}

誰が私を啓発する気ですか?

したがって、@peakのおかげで、上記のユースケースの完全な答えは

echo '{ "a": { "b": "c", "d": "e" } }{ "a": { "b": "f", "d": "g" } }' | jq -n '{ x: [inputs | .a | { (.b): .d} ] | add }'
{
  "x": {
    "c": "e",
    "f": "g"
  }
}
4

1 に答える 1