Skip to content

JSONファイル

JSON ファイルは、キーと値のペアを持つ構造化データ形式です。
nehan では、JSON ファイルを読み込む際に、この構造をデータフレーム(表形式データ)に変換します。
この変換プロセスを理解することで、JSON ファイルをより効果的にデータソースとして活用できます。
合わせて、JSON ファイルを読み込む際に使用できるオプションについて説明します。


対応ファイル形式

  • .json: 標準的な JSON 形式。一つの大きな JSON オブジェクトまたは配列を含むファイル
  • .jsonl: JSON Lines 形式。各行が独立した JSON オブジェクトを含む形式

基本的な変換ルール

キーが列名に変換される

JSON オブジェクトのキーは、データフレームの列名に変換されます。
例えば、以下のような JSON ファイルがあるとします。

{"名前": "田中", "年齢": 30, "都市": "東京"}
{"名前": "佐藤", "年齢": 25, "都市": "大阪"}

この JSON ファイルは以下のようなデータフレームに変換されます。

名前年齢都市
田中30東京
佐藤25大阪

各 JSON オブジェクトが 1 行に変換される

JSON ファイル内の各 JSON オブジェクトは、データフレームの1 行に変換されます。
nehan では、JSON ファイルの各行が 1 つの JSON オブジェクトとして扱われます(JSON Lines 形式)。


ネストされた JSON 構造の処理

ネストされたオブジェクト

JSON オブジェクト内にネストされたオブジェクトがある場合、そのオブジェクトは文字列として 1 つのセルに格納されます。

{"名前": "田中", "住所": {"都市": "東京", "郵便番号": "100-0001"}}
{"名前": "佐藤", "住所": {"都市": "大阪", "郵便番号": "530-0001"}}

この JSON は以下のようなデータフレームに変換されます。

名前住所
田中{‘都市’: ‘東京’, ‘郵便番号’: ‘100-0001’}
佐藤{‘都市’: ‘大阪’, ‘郵便番号’: ‘530-0001’}

ネストされたオブジェクトの内容にアクセスするには、後処理が必要です。
例えば、住所列から都市の値を抽出して新しい列を作成するなどの操作が必要になります。
この操作は分析プロジェクトにおけるデータ処理機能であるJSON 列の展開にて実施できます。

配列(リスト)

JSON オブジェクト内に配列がある場合、その配列は文字列として 1 つのセルに格納されます。

{"名前": "田中", "スキル": ["Python", "SQL", "JavaScript"]}
{"名前": "佐藤", "スキル": ["Java", "C++"]}

この JSON は以下のようなデータフレームに変換されます。

名前スキル
田中[‘Python’, ‘SQL’, ‘JavaScript’]
佐藤[‘Java’, ‘C++‘]

配列の内容にアクセスするには、後処理が必要です。

深くネストされた構造

複数レベルのネストがある場合も、同様に文字列として格納されます。

{"ユーザー": {"プロフィール": {"名前": "田中", "詳細": {"年齢": 30, "職業": "エンジニア"}}}}
{"ユーザー": {"プロフィール": {"名前": "佐藤", "詳細": {"年齢": 25, "職業": "デザイナー"}}}}

この JSON は以下のようなデータフレームに変換されます。

ユーザー
{‘プロフィール’: {‘名前’: ‘田中’, ‘詳細’: {‘年齢’: 30, ‘職業’: ‘エンジニア’}}}
{‘プロフィール’: {‘名前’: ‘佐藤’, ‘詳細’: {‘年齢’: 25, ‘職業’: ‘デザイナー’}}}

データ型の処理

JSON ファイルから読み込まれたデータの型は以下のように処理されます。

  • 数値: 数値型として読み込まれます。
  • 文字列: 文字列型として読み込まれます。
  • ブール値: True/False の文字列型として読み込まれます。
  • null: <NA>(欠損値)として読み込まれます。
  • オブジェクト: 文字列型として読み込まれます。
  • 配列: 文字列型として読み込まれます。

異なる構造の JSON オブジェクト

JSON ファイル内のオブジェクトが異なるキーを持つ場合、すべてのキーが列として作成され、存在しない値は NaN(欠損値)として扱われます。

{"名前": "田中", "年齢": 30}
{"名前": "佐藤", "都市": "大阪"}

この JSON は以下のようなデータフレームに変換されます。

名前年齢都市
田中30<NA>
佐藤<NA>大阪

読み込みオプション

文字コード(エンコーディング)

ファイルの文字コードを指定します。

  • 自動検出: システムが自動的に文字コードを検出します。

    • 日本語ファイルの場合、UTF-8、Shift-JIS、EUC-JP などを自動判別。
    • 自動検出に失敗する場合は手動で指定する必要があります。
  • 手動設定: 以下の文字コードを入力できます。

    • utf-8: 国際標準の文字コード。最近のファイルはこれが多い。
    • cp932: Shift-JIS の場合に入力。日本語 Windows で一般的な文字コード。Excel から出力した CSV はこの形式が多い。
    • euc-jp: 主に UNIX 系で使われる日本語文字コード。

文字コードに関する注意点

  • JSON 標準は UTF-8: JSON 仕様では UTF-8 が標準とされています
  • 文字化けが発生する場合: 正しい文字コードを選択していない可能性があります
  • UTF-8 の BOM: UTF-8 の BOM 付きファイルも自動的に認識されます

圧縮形式

圧縮された JSON ファイルを直接読み込む場合に指定します。

  • 自動検出: ファイル拡張子から自動的に圧縮形式を検出

    • 例: .json.gz → GZIP 形式として自動検出
    • 例: .jsonl.bz2 → BZ2 形式として自動検出
  • GZIP: .gz.gzip 形式

    • 高い圧縮率と速度のバランスが取れた形式
    • 大きな JSON ファイルの圧縮に効果的
  • BZ2: .bz2 形式

    • GZIP より高い圧縮率だが処理は遅い
    • 非常に大きな JSON ファイルで効果的
  • ZIP: .zip 形式

    • 複数の JSON ファイルをまとめて圧縮できる形式
    • 解凍せずに直接読み込むことが可能

注意事項

  • JSON ファイルは、各行が独立した JSON オブジェクトであるJSON Lines形式(.jsonl)として読み込まれます。
  • 標準的な JSON ファイル(単一の大きなオブジェクト)も自動的に行ごとに分割して読み込まれます。
  • 各 JSON オブジェクトのキーは列名として扱われます。
  • ネストされた JSON オブジェクトは適切に展開されない場合があります。
  • 配列要素を含む JSON オブジェクトは、配列が文字列として読み込まれます。