created: 2018-11-03T08:45:49.000Z

jq での変形例 (keys[]でのオブジェクト=>オブジェクト編)

こんなjsonがあって

{
  "xxxxxx": {
    "_name": "トーマス",
    "children": [
      {
        "name": "トーマス(男性向け)",
        "code": "41080"
      },
      {
        "code": "41081",
        "name": "トーマス(女性向け)"
      },
      {
        "code": "41082",
        "name": "トーマス(センシティブ)"
      }
    ]
  },
  "yyyyyy": {
    "_name": "古物商/リサイクル/オークション",
    "children": [
      {
        "name": "オークション/フリマ",
        "code": "7040"
      }
    ]
  }
}

こう変換したい (children配下のcodeの配列にしたい)

{
  "xxxxxx": [
    "41080",
    "41081",
    "41082"
  ]
}
{
  "yyyyyy": [
    "7040"
  ]
}

.jq

この変換はこんな感じのjqスクリプトで出来る

keys[] as $k | { ($k): [.[$k].children[].code] }

注意点といえるのは次の二つ

  • keys[] as $k |
    • パイプ以降はそれぞれのキーごとのmap/foreachみたいな処理に出来る
    • keys as $k では$kに配列が入ってしまうのでちょっと違う
  • { ($k):
    • $変数は括弧で囲わないとオブジェクトのキーに出来ない
Efficient Linuxコマンドライン ―開発と自分に磨きをかけるLinuxのテクノロジー
[ad] Efficient Linuxコマンドライン ―開発と自分に磨きをかけるLinuxのテクノロジー
Daniel J. Barrett, 大嶋 真一 (単行本(ソフトカバー))