コンテンツにスキップ

JSON列を展開する

JSON の文字列が入った列を、中身のキーごとの列に展開します。 API から取り込んだデータや、ログの付加情報を扱うときに使います。

入出力

ポート内容
入力データデータ
出力データキーごとの列を足したデータ

Spark エンジンでは動きません。

設定項目

処理対象列を選択必須
JSON が入っている列。文字列の列だけ選べます。複数選べます。
処理対象列を結果から除外する
on にすると、展開前の列を消します。

展開のしかた

JSON のキーがそのまま列名になり、表のいちばん右に足されます。

入力

idinfo
1{"age": 30, "city": "東京"}
2{"age": 25, "city": "大阪"}

出力

idinfoagecity
1(読み取り後の形)30東京
2(読み取り後の形)25大阪
  • 行によってキーが違っても構いません。 ないところは空欄になります
  • 入れ子になったキーは、親と子を __ でつないだ 1 列になります。{"user": {"name": "山田"}} なら user__name
  • 配列([ ])は列に分かれません。 {"tags": ["赤", "青"]} なら tags という 1 列ができ、中身は ['赤', '青'] という文字列になります。1 件ずつにしたいなら、このあと文字の置換で [ ] ' と空白を外し、文字列の分割で , で分けてください
  • 数値は数値の列、それ以外は文字列の列になります
  • info は残りますが、中身は入力した文字列そのままではありません。 読み取った結果で上書きされるので、書き方(引用符や空白)が変わります。元の文字列をそのまま残したいなら、先に文字列同士の結合で info を別の新規列に写しておいてください
  • 「処理対象列を結果から除外する」を on にすると info が消えます

読めない書き方

true false null が入っている JSON は読めません。 エラーになるので、先に文字の置換で別の書き方に直してください。たとえば true を "true"、null を "" にします。

空欄の行や、途中で切れた文字列が混ざっている場合も読めません。

エラーと対処

JSON として読めない値が混ざっている

列の中に 1 行でも読めない値があると、処理全体が止まります。

JSON形式ではない値が含まれています

直し方 — 対象列の中身を確かめてください。よくあるのは次の 3 つです。

true false null が入っている
文字の置換で “true” “false” "" のような形に直してから掛けます。
空欄の行がある
条件で行をフィルタで { から始まる行だけに絞ってから掛けます。
途中で切れている
取り込み元で値が切り詰められていないかを確かめます。

選んだ列が見つからない

「処理対象列を選択」で指定した列が入力データにないとき、またはどの条件にも 1 列も当たらないとき。前の処理で列名が変わった場合にも出ます。

対象の列が存在しません。

直し方 — 列を選び直してください。列名が変わりうるデータでは、名前に頼らない選び方(型で選ぶ・前方一致)に変えると壊れにくくなります。

よく使う例

1. API の応答を展開する

お題 — 取り込んだデータの 1 列に JSON が入っていて、中身で絞り込みたい

入力 — info に {"age": 30, "city": "東京"}

設定 — 処理対象列に info

出力 — age city の 2 列が増える

2. 展開前の列を消す

お題 — 展開したら元の JSON は要らない

入力 — id info

設定 — 「処理対象列を結果から除外する」を on

出力 — id age city(info は消える)

3. 複数の JSON 列をまとめて展開する

お題 — JSON の列が 2 つある

入力 — info と meta

設定 — 処理対象列に 2 列とも選ぶ

出力 — 両方の列のキーがすべて列として増える

4. 入れ子の値を取り出す

お題 — 1 段深いところに入っている値を列にしたい

入力 — info に {"user": {"name": "山田", "age": 30}}

設定 — 処理対象列に info

出力 — user__name に 山田、user__age に 30

5. 壊れた行を避ける

お題 — 一部の行の JSON が壊れていて止まる

入力 — info に空欄の行が混ざっている

設定 — 処理対象列に info

手順 — 条件で行をフィルタで { から始まる行だけに絞ってから展開する

出力 — 絞り込んだ行だけが展開される

関連