JSON - > csvはヘッダー行を生成し、空のフィールドが見つかるとヘッダーを埋めます。

JSON - > csvはヘッダー行を生成し、空のフィールドが見つかるとヘッダーを埋めます。

1行に数百万のオブジェクトを含むJSONlineファイルをインポートするbashプログラムがあります(参照:源泉)

{
  "company_number": "09626947",
  "data": {
    "address": {
      "address_line_1": "Troak Close",
      "country": "England",
      "locality": "Christchurch",
      "postal_code": "BH23 3SR",
      "premises": "9",
      "region": "Dorset"
    },
    "country_of_residence": "United Kingdom",
    "date_of_birth": {
      "month": 11,
      "year": 1979
    },
    "etag": "7123fb76e4ad7ee7542da210a368baa4c89d5a06",
    "kind": "individual-person-with-significant-control",
    "links": {
      "self": "/company/09626947/persons-with-significant-control/individual/FFeqke7T3LvGvX6xmuGqi5SJXAk"
    },
    "name": "Ms Angela Lynette Miller",
    "name_elements": {
      "forename": "Angela",
      "middle_name": "Lynette",
      "surname": "Miller",
      "title": "Ms"
    },
    "nationality": "British",
    "natures_of_control": [
      "significant-influence-or-control"
    ],
    "notified_on": "2016-06-06"
  }
}

私のJQクエリは次のとおりです。

for file in psc_chunk_*; do
jq --slurp --raw-output 'def pad($n): range(0;$n) as $i | 
.[$i]; ([.[] | .data.natures_of_control | length] | max) as $mx |
.[] | 
select(.data) |
[.company_number, .data.kind, .data.address.address_line_1, .data.address.country, .data.address.locality, .data.address.postal_code, .data.address.premises, .data.identification.country_registered, .data.identification.legal_authority, .data.identification.legal_form, .data.identification.place_registered, .data.identification.registration_number, .data.ceased_on, .data.country_of_residence, "\(.data.date_of_birth.year)-\(.data.date_of_birth.month)", .data.etag, .data.links.self, .data.name, .data.name_elements.title, .data.name_elements.forename, .data.name_elements.middle_name, .data.name_elements.surname, .data.nationality, .data.notified_on, (.data.natures_of_control | pad($mx))] |
@csv' $file > $file.csv;
done

これは多くのJQの専門家の目を傷つけることができます。キー:値のペアを抽出するのはあまり効率的ではなく、プロバイダがキー名を変更すると、私のコードは機能しなくなります。

すべてのjsonをcsvにマージする方法はありますか?キーをヘッダーとして保持- 追加の難易度はnatures_of_controlさまざまなアイテム数のリストがあります。(これには長方形の結果を得るためにpad機能を使用します)。

ベストアンサー1

Miller(https://github.com/johnkerl/miller)、ラン

mlr --j2c unsparsify input.json>output.csv

おすすめ記事