WeeklyAlteryxTips#79 JSONパースツールの新しいオプションについて

Alteryx

JSONパースツールをご存知でしょうか?JSON(JavaScript Object Notation)形式のデータをフラットなテーブル形式に変換するためのツールです。

これまでのオプションは、各値をトップからのディレクトリのような形で分解するような動きをしていました。例えば、以下のようなJSONファイルがあるとします。

[
  {"name": "Goto", "instrument": "Guitar"},
  {"name": "Kita", "instrument": "Guitar"},
  {"name": "Ijichi", "instrument": "Drum"},
  {"name": "Yamada", "instrument": "Base"}
]

これを分解すると、データ型ごとに分解、もしくは1つの列に分解、という形で以下のようにパースしていました。

単一の文字列フィールドに値を出力する:

データ型固有のフィールドに値を出力する:

※今回のサンプルは文字列のものしかないため、すべて「JSON_ValueString」に展開されています。

この結果から使いやすいテーブル形式に形状変更するのは少し面倒です。例えば、以下のようなワークフローで表形式のデータに変換できます。

結果は、

といった感じです。

JSONパースツールの新しいオプション

これらに加えて、Designer 2024.2ではJSONパースツールに新しいオプションが加わりました。

これらのオプションは適した場所で使わないと以下のようにエラーになってしまいます。

それでは、どのようなケースで使えるのでしょうか?

※いずれもAMP Engineオンでしか利用できないのでご注意ください。

配列のフラット化

JSONファイルの配列は、[]でくくって表現されます。つまり、今回のケースでは、頭とおしりが[]でくくられていたので、配列、ということになります。

つまり、最初のサンプルでは、{}で括られたオブジェクトが配列として[]内に4つ存在している、ということになります。そして「配列のフラット化」は、この配列を分解してそれぞれレコードに格納する、という機能を持っています。

最初のサンプルに戻ると、これに対してJSONパースツールで「配列のフラット化」を行うと、以下のようなデータが得られます。

{}単位で個別のレコードになっており、それぞれインデックス番号が振られているのがわかります。

ところで、やってることは非常に単純な気がしますが、例えばこれ、最初と最後のブランケットを削除し、{}内のカンマを無視して列分割ツールで行に分割できないの?と思うかもしれません。ただ、列分割ツールに「{}」内のカンマを無視する機能がないため、この試みはうまくいきません。

アンネスト

アンネストは、フラット化されたJSONのオブジェクトを表形式に分割します。

先ほどフラット化で作成した項目をアンネストで指定すると、以下のような結果が得られます。

各項目が無事に別の項目に分けられました。

データ入力ツールのオプションについて

データ入力ツールでも、JSONファイル読み込み時には以下のオプションが利用可能です。

  • 構造化された形式でデータを読み込む
  • 値を文字列として解析する

上側の「構造化された形式でデータを読み込む」の場合は、AMP利用時のみで今回解説したオプションと同等のことを自動的に行なってくれます(アンネストとフラット化)。

一方、AMPエンジン利用時、「値を文字列として解析する」オプションを使うと、以下のような感じになります。

このオプションを使わない場合は、データ型に応じて別項目に分解されます。

まとめ

  • JSON形式は単純なものは普通に値の出力オプションでなんとかなりますが、複雑になってくると、少しずつアンネストとフラット化で分解していくというのも良いかと思います。
  • AMP Engineオンでしか動かないのでご注意ください。
  • Advent of Code 2015年の12日目の問題でお世話になりました・・・。

サンプルワークフローダウンロード

次回

またインタラクティブチャートツールのTipsになるかと思います。

コメント

タイトルとURLをコピーしました