csvファイルをjson に変換してパイプライン変数に格納 (Azure Data Factory)

[English]

BLOBストレージ上のcsvファイルをパイプライン変数に格納する例。

csvファイルの内容をjsonにしてWeb Accessアクティビティに使用したい場合。

本来は、Copyアクティビティを使って変換するが、Copyアクティビティではできないような細かな処理を行いたい場合に、無理やり文字列操作で実現する。

この処理の場合、改行コードなどJSONでエスケープしなければならない文字列を全て自前でエスケープする必要がある。

1.BLOBストレージ上のCSVファイル


"name01","value01"
"name02","value02"
 

2.変換後のjson

{
     "records" : [
          { "id" : "name01", "info" : "value01"},
          { "id" : "name02", "info" : "value02"}
     ]
}

 

3. パイプライン

3.1. パイプライン変数

BUFFER_V1_1   String
BUFFER_V1_2   String
BUFFER_V1_3   String

3.2. パイプライン構成

3.3. Lookup1 (参照)

  • SRC …. json ファイルを指定

  • 「先頭行のみ」のチェックをはずす

 

3.4. ForEach1 (繰り返し)

  • 順次にチェック

  • 項目:
    @activity('Lookup1').output.value

 

3.5. Set V1 (変数の設定)

  • 変数:BUFFER_V1_1

  • 項目:
    @concat(variable('BUFFER_V1_2'), '{"id":"', ESCAPE(item().Prop_0), '","info":"', ESCAPE(item().Prop_1),'"}')


ここで、上記 ESCAPE()の部分は実際には以下の記述になる。

uriComponentToString(replace(replace(replace(replace(replace(urlComponent(coalesce( *** , ”)),’%5C’,’%5C%5C’), ‘%22′,’%5C%22’), ‘%0D’,’%5Cr’), ‘%0A’, ‘%5Cn’), ‘%09’, ‘%5Ct’))

replace(**, ‘%5C’,’%5C%5C) ….. “\”を”\\”に置換

replace(**, ‘%22’,’%5C%22) ….. “”” を “\””に置換

replace(‘**’, ‘%0D’,’%5Cr’) …. \rを “\r”に置換

replace(‘**’, ‘%0A’,’%5Cn’) …. \nを “\n”に置換

replace(‘**’, ‘%09′,’%5Ct’) ….. \t を “\t”日間

3.6. Set V2 (変数の設定)

  • 変数:BUFFER_V1_2
  • 項目:
    @concat(variable('BUFFER_V1_1'), ',')

 

3.7. Set V3 (変数の設定)

  • 変数:BUFFER_V1_3
  • 項目:
    @concat(variable('BUFFER_V1_3'), '{ "records" [', variable('BUFFER_V1_1'),'}')

 

 

以上で、上記パイプラインが終わったあとに、変数 BUFFER_V1_31には、返還後のjson文字列が入っている。

 

 

■関連記事

csvをjsonにCopy アクティビティを使って変換 (Azure Data Factory)