🖥

#jq コマンドむずい。オブジェクトの配列から、任意のキーを指定してフィルタし、新しいオブジェクトの配列を組み立て直そうとして失敗した例。

2019/04/09に公開
  • 配列の持つオブジェクト内で
  • a というキーを持つ value を
  • x というキー に差し替えて
  • 再び配列に収める

ということをやりたい

json

[
  {
    "a": 1,
    "b": 2,
    "c": 3
  },
  {
    "a": 3,
    "b": 4,
    "c": 5
  }
]

exe

キーが一つならうまくいく

$ echo '[{"a" : 1, "b" : 2, "c" : 3},{"a" : 3, "b" : 4, "c" : 5}]' | jq '[{"x": .[].a}]'
[
  {
    "x": 1
  },
  {
    "x": 3
  }
]

exe

キーが複数だとこれだ!
なんだか組み合わせの数だけ増えているような気がするな?
べき乗っぽいぞ!

$ echo '[{"a" : 1, "b" : 2, "c" : 3},{"a" : 3, "b" : 4, "c" : 5}]' | jq '[{"x": .[].a, "y" : .[].a, "z" : .[].a}]' | pbcopy

[
  {
    "x": 1,
    "y": 1,
    "z": 1
  },
  {
    "x": 1,
    "y": 1,
    "z": 3
  },
  {
    "x": 1,
    "y": 3,
    "z": 1
  },
  {
    "x": 1,
    "y": 3,
    "z": 3
  },
  {
    "x": 3,
    "y": 1,
    "z": 1
  },
  {
    "x": 3,
    "y": 1,
    "z": 3
  },
  {
    "x": 3,
    "y": 3,
    "z": 1
  },
  {
    "x": 3,
    "y": 3,
    "z": 3
  }
]

exe

$ echo '[{"a" : 1, "b" : 2, "c" : 3},{"a" : 3, "b" : 4, "c" : 5}]' | jq '[{"x": .[].a, "y" : .[].a, "x" : .[].a, "a" : .[].a}]'

[
  {
    "x": 1,
    "y": 1,
    "a": 1
  },
  {
    "x": 1,
    "y": 1,
    "a": 3
  },
  {
    "x": 3,
    "y": 1,
    "a": 1
  },
  {
    "x": 3,
    "y": 1,
    "a": 3
  },
  {
    "x": 1,
    "y": 3,
    "a": 1
  },
  {
    "x": 1,
    "y": 3,
    "a": 3
  },
  {
    "x": 3,
    "y": 3,
    "a": 1
  },
  {
    "x": 3,
    "y": 3,
    "a": 3
  },
  {
    "x": 1,
    "y": 1,
    "a": 1
  },
  {
    "x": 1,
    "y": 1,
    "a": 3
  },
  {
    "x": 3,
    "y": 1,
    "a": 1
  },
  {
    "x": 3,
    "y": 1,
    "a": 3
  },
  {
    "x": 1,
    "y": 3,
    "a": 1
  },
  {
    "x": 1,
    "y": 3,
    "a": 3
  },
  {
    "x": 3,
    "y": 3,
    "a": 1
  },
  {
    "x": 3,
    "y": 3,
    "a": 3
  }
]

Original by Github issue

https://github.com/YumaInaura/YumaInaura/issues/1126

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2019-04-09

Discussion