単一のjsonファイルを複数のjsonファイルに分割する方法

単一のjsonファイルを複数のjsonファイルに分割する方法

私たちは次のようなものを持っていますjsonexample 1

実施例1

more file.json

{
  "version": 1,
  "partitions": [
    {
      "topic": "list_of_cars",
      "partition": 2,
      "replicas": [
        1003,
        1004,
        1005
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 4,
      "replicas": [
        1005,
        1006,
        1001
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 0,
      "replicas": [
        1001,
        1002,
        1003
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 1,
      "replicas": [
        1002,
        1003,
        1004
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 5,
      "replicas": [
        1006,
        1001,
        1002
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    },
    {
      "topic": "list_of_cars",
      "partition": 3,
      "replicas": [
        1004,
        1005,
        1006
      ],
      "log_dirs": [
        "any",
        "any",
        "any"
      ]
    }
  ]
}

topic(例1)で各配列を切り取りたいと思います。

file1.json file2.json file3.json .. 下の図のようにjsonファイルにリダイレクトします。

最初のファイル

more file1.json

{
    "version": 1,
     "partitions": [{
        "topic": "list_of_cars",
        "partition": 2,
        "replicas": [
               1003,
               1004,
               1005
                ],
                "log_dirs": [
                 "any",
                 "any",
                 "any"
       ]
   }]
}

2番目のファイル

 more file2.json

{
    "version": 1,
     "partitions": [{
        "topic": "list_of_cars",
        "partition": 4,
        "replicas": [
               1005,
               1006,
               1001
                ],
                "log_dirs": [
                 "any",
                 "any",
                 "any"
       ]
   }]
}

3番目のファイル

more file3.json
.
.
.

答え1

特定の区画の識別子が保管されているように見えるので、区画を繰り返すことで、.partition[].partition各識別子に対してその特定の識別子を持たない区画を除去することができます。

以下は、識別子が空白などのない単純な整数であると仮定します。

for part in $(jq '.partitions[].partition' file.json); do
    jq --argjson part "$part" 'del(.partitions[] | select( .partition != $part ))' file.json >file-partition-"$part".json
done

これにより、配列のインデックスではなくパーティション名が付けられた各パーティションのファイルが作成されます.partition[]

関連情報