AlteryxでJSONファイルを入力として扱うときの挙動

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

Alteryxでは、Input DataツールのフォーマットにJSONファイルが指定可能です。

スクリーンショット 2017-11-15 11.25.47

今回は、入力としてJSONファイルを指定した場合どのような形式で読み込まれるのかを見ていきたいと思います。

簡単なファイルでの挙動

まずは非常にシンプルなJSONファイルを読み込ませたときの挙動を見ていきましょう。

扱うJSONは以下のようになります。

[
  {"id" : 0, "name" : "hoge"},
  {"id" : 1, "name" : "fuga"},
  {"id" : 2, "name" : "piyo"}
]

このデータは以下のような形式で読み込まれます。

スクリーンショット 2017-11-15 11.39.32

配列中の0番目の要素のidが0.idのように階層が「.」で区切られてJSON_Nameに入ります。 また、実際の値はJSON_ValueStringには入ります。

列名からもわかる通り、JSONの中に含まれる値はすべて文字列として読み込まれています。

以下のワークフローでは、このデータを変形させて扱いやすい形式にしています。

スクリーンショット 2017-11-15 11.43.26

まず、Text To Columnsツールで「.」を区切り文字にしてJSON_Nameを分割することで、階層ごとの名前を独立させています。 設定内容と結果は以下のようになっています。

スクリーンショット 2017-11-15 11.45.29

スクリーンショット 2017-11-15 11.45.12

このデータに対して、Cross Tabツールで

  • 要素番号であるJSON_Name1でグループ化
  • 要素名であるJSON_Name2をHeaderに指定
  • 値であるJSON_ValueStringをValueに指定

と設定します。

スクリーンショット 2017-11-15 11.47.16

以下のような結果を得ます。

スクリーンショット 2017-11-15 11.50.42

あとはSelectツールでいらないJSON_Name1を削除したり、idを整数にしたりして完了です。

スクリーンショット 2017-11-15 11.51.32

1行1JSONなファイルを扱う

続いて、以下のようなデータでの挙動を見てみましょう。

{"id" : 0, "name" : "hoge"}
{"id" : 1, "name" : "fuga"}
{"id" : 2, "name" : "piyo"}

データ中の1行が1つのJSONになっている形式です。 JSONを出力するようなログファイルがこの形式だったり、HadoopなどでJSONを扱いたいときだったりはこの形式になってたりしますね。

JSONファイルとしてそのまま読み込むと、残念ながら以下のような結果になってしまいます。 1件目しか取得できていません。

スクリーンショット 2017-11-15 11.54.47

これをうまく読み込むには、まずCSV(テキストファイル)として読み込みます。 この際、Delimiterには途中で区切られてしまうことがないような適当な値を設定します(ここでは、\nにしています) また、ヘッダ行なしと区切り文字のエスケープがないことも明示的に指定するようにしてください。

スクリーンショット 2017-11-15 11.58.31

これで以下のように1列のデータとしてJSONがそのまま読み込まれます。

スクリーンショット 2017-11-15 12.00.41

このデータに対してJSON Parseツールを利用します。

image193

今回の設定項目はパースする対象の列のみで問題ありません。

スクリーンショット 2017-11-15 12.03.58

ツールの出力結果は以下のようになります。

スクリーンショット 2017-11-15 12.04.36

元々が配列の中に入っていたわけではないので要素番号の階層はありませんが、先ほどのJSONファイル読み込みとほぼ同じ形式になりました。 JSON Parseツールの前にRecord IDツールなどを置いておけば、ここから先は同じ方法で同じ結果を得ることができます。

複雑なJSONファイルだとどうなるか

さて、最後に階層構造を持つ少し複雑なJSONを扱ってみましょう。 以下のような内容のものになります。

[
  {"id" : 0, "name" : "hoge", "values" : [1, 2, 3], "rows" : { "a": 1, "b":2, "c":3}},
  {"id" : 1, "name" : "fuga", "values" : [4, 5, 6, 7], "rows" : { "a": 4, "b":5, "c":6, "d":7}},
  {"id" : 2, "name" : "piyo", "values" : [8, 9], "rows": {"a":8, "b":9}}
]

このファイルを読み込むと、以下のような形式になります。

スクリーンショット 2017-11-15 12.08.46

ネストした分だけJSON_Nameの「.」で繋がれた階層が深くなっているのが確認できます。 ネストした中身が要素ごとにサイズが違ったり、配列の扱いをどうするかなどは、実際に利用する状況に依存しますので、このデータに対して加工することはしませんが、形式は基本的に同じなので、同じような方法で加工していくことが可能です。

おわりに

今回はAlteryxでJSONファイルを入力として扱った場合の挙動を解説しました。

実際にデータを扱う際には今回解説したような加工が必要になりますが、様々な形式のJSONに柔軟に対応可能な仕組みになっていることが確認できたかと思います。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400