JSON配列を複数のファイルに分割する

JSON配列を複数のファイルに分割する

次のファイルがあります。

[
  {
    "billingAccountNumber": "x",
    "paymentResponseObject": {
      "uiErrorDipslayMessage": "",
      "transactionStatus": "S",
      "transactionDescription": "",
      "transactionCode": "",
      "confirmationNumber": "1"
    }
  },
  {
    "billingAccountNumber": "y",
    "paymentResponseObject": {
      "uiErrorDipslayMessage": "",
      "transactionStatus": "S",
      "transactionDescription": "",
      "transactionCode": "",
      "confirmationNumber": "2"
    }
  },
  {
    "billingAccountNumber": "z",
    "paymentResponseObject": {
      "uiErrorDipslayMessage": "",
      "transactionStatus": "S",
      "transactionDescription": "",
      "transactionCode": "",
      "confirmationNumber": "3"
    }
  }
]

データがまったくそうではなく、3つ以上の要素があります。このデータに基づいてx.json、、、y.jsonおよび3つのファイルを生成したいと思いますz.json。各ファイルの内容をpaymentResponseObject

これを行う方法はありますかjq?でこれを行う方法を見つけましたが、awkこれは非常に不機嫌で、他のモードを使用してこのプロセスを繰り返すことができることを願っています。awk各モードでスクリプトの80%を書き直す必要がありました。

ベストアンサー1

~からこれしたがって、スレッドは次のようになります。

jq -cr 'keys[] as $k | "\($k)\n\(.[$k])"' input.json | while read -r key; do
  fname=$(jq --raw-output ".[$key].billingAccountNumber" input.json)
  read -r item
  printf '%s\n' "$item" > "./$fname"
done

おすすめ記事