コンテンツにスキップ

JSONファイル

JSON ファイルを読み込むときに使える設定と、キーと値の並びが表に変換されるときの決まりを説明します。ファイルタイプで json を選んでいるときだけ出る項目です。

対応ファイル形式

拡張子中身
.json中身が JSON Lines の形になっているファイル
.jsonl1 行に 1 件ずつ書いた JSON(JSON Lines)形式のファイル

設定項目

どちらもチェックボックスで、既定では OFF です。

文字コードを指定する
ON にすると文字コードの欄が出ます。一覧から選ぶのではなく、自分で打ちます。はじめから cp932 が入っているので、JSON では多くの場合 utf8 に書き換えることになります(JSON の標準は UTF-8 です)。
圧縮形式を指定する
ON にするとファイルの圧縮タイプの欄が出ます。こちらは一覧から選びます。選べるのは拡張子から自動判別 / なし / zip / gzip / bz2 の 5 つで、はじめは zip が選ばれています。

OFF のままだと何を見て決まるか

設定OFF のときの決まり方
文字コードファイルの先頭 8KB を読んで判定します。 判定できないときは utf8 になります。圧縮したファイルは中身を見ずに utf8 扱いになります(解凍前の 8KB は字として読めないため)
圧縮形式拡張子で決まります。 .gz は gzip、.bz2 は bz2、.zip は zip、どれでもなければ圧縮なしです。読めるのはこの 3 つだけです

このファイルタイプで出る項目

JSON はほかの形式より出る項目が少ない形式です。

項目出るか
文字コードを指定する / 圧縮形式を指定する出る
列にファイル名を追加する / 列にフォルダ名を追加する出る
区切り文字を指定する出ない(区切り文字という考え方がないため)
読み込む列を指定する出ない(件ごとにキーが違いうるため)
先頭から行数をスキップし以降を読み込む出ない
各ファイルから読み込む行数を指定する出ない
1行目を列名として扱う出ない(キーがそのまま列名になるため)

表に変換されるときの決まり

キーが列名になり、1 件が 1 行になる

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

件ごとにキーが違うときは、すべてのキーが列になる

ない値は空欄(<NA>)になります。

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

入れ子と配列は JSON の文字列のまま 1 つのセルに入る

展開はされません。 セルに入るのは、ダブルクォーテーションを使った JSON の書き方のままの文字列です。

入れ子・配列・深い入れ子の例

入れ子

{"名前": "田中", "住所": {"都市": "東京", "郵便番号": "100-0001"}}
名前住所
田中{“都市”:“東京”,“郵便番号”:“100-0001”}

配列

{"名前": "田中", "スキル": ["Python", "SQL", "JavaScript"]}
名前スキル
田中[“Python”,“SQL”,“JavaScript”]

深い入れ子

{"ユーザー": {"プロフィール": {"名前": "田中", "詳細": {"年齢": 30}}}}
ユーザー
{“プロフィール”:{“名前”:“田中”,“詳細”:{“年齢”:30}}}

中の値を列として取り出したいときは、読み込んだあと分析プロジェクトのJSON列を展開するを使います。

値の型

型ごとの読まれ方
JSON の値読み込み後
数値数値型
文字列文字列型
真偽値true / false の文字列型(小文字)
null空欄(<NA>)
入れ子JSON の文字列
配列JSON の文字列

よく使う例

1. ログの JSON Lines をそのまま取り込む

見るところ中身
お題アプリのイベントログが 1 行 1 件の JSON で出力されている
入力events/2024-01-01.jsonl
設定ファイルタイプで json を選び、ほかは何も変えない
出力キーが列名、1 行が 1 イベントの表になる

2. 文字化けする JSON を読む

見るところ中身
お題社内システムが出した JSON の日本語が記号の並びになる
入力master.json(Windows で作られたもの)
設定文字コードを指定するを ON にし、文字コードを cp932 のままにする
出力日本語が読める

3. 入れ子の中の値を列にする

見るところ中身
お題{"住所": {"都市": "東京"}} の「都市」だけを列にしたい
入力users.jsonl
設定データソース側では何もしない。読み込んだあと、分析プロジェクトでJSON列を展開するを住所列に当てる
出力都市が独立した列になる

4. 圧縮したままの JSON を読む

見るところ中身
お題日次ログが .jsonl.gz で置いてある
入力logs/2024-01-01.jsonl.gz
設定何も変えない(圧縮形式を指定するは OFF のまま)
出力拡張子から gzip と判定され、そのまま読み込まれる

関連