JSON形式のデータをCSV形式のファイルに変換する方法について

UiPath StudioXで、UiPath Orchestrator APIから取得したJSON形式のトリガーデータをCSV形式のファイルに変換することを試みています。取得したJSONの構造は最下部をご覧ください。

上記の記事を参考に、JSONの逆シリアル化まではできましたが、JSONオブジェクトのキーと値を取り出して、データテーブルの列を追加したり、データテーブルに行を追加していく部分がどうにもうまくいきません。

jsonObj(“value”)内のコレクションの繰り返し部分で、currentJpropertyのNameやValueが設定できずエラーになります。

どのようにすれば記事のようにうまくCSVファイルに変換できるか知りたいです。

また、記事の方法の他にもより良い変換方法がありましたらご教示ください。

よろしくお願いいたします。

取得したJSONの構造⬇️
{
  "@odata.context": "https://example.com/odata/$metadata#ProcessSchedules",
  "@odata.count": 1,
  "value": [
    {
      "Key": "example-key-1",
      "Enabled": true,
      "Name": "example_name",
      "ReleaseId": 12345,
      "ReleaseKey": "example-release-key-5678",
      "ReleaseName": "example_release_name",
      "EntryPointPath": null,
      "PackageName": "example_package_name",
      "EnvironmentName": null,
      "EnvironmentId": "",
      "JobPriority": null,
      "SpecificPriorityValue": null,
      "RuntimeType": "Unattended",
      "StartProcessCron": "0 20 8-20/1 ? * * *",
      "StartProcessCronDetails": "{\"advancedCron\":\"0 20 8-20/1 ? * * *\"}",
      "StartProcessCronSummary": "20 分, 1 時間ごと, 08:00 と 20:59 の間",
      "StartProcessNextOccurrence": "2025-03-31T08:20:44Z",
    (以下略)
    },
    {
      "Key": "example-key-2",
      "Enabled": true,
      "Name": "example_name",
      (以下略)
    },
    {
      "Key": "example-key-3",
      "Enabled": true,
      "Name": "example_name",
      (以下略)
    },
    ...
  ]
}

こんにちは

対象となるJSON全体をテキストファイル(あるいはそれをZIP化したもの)として共有可能でしょうか?

ダミーのJSONファイルを作成しました。

"MachineRobots"と"Tags"については一段階層が深く、複雑になりそうであればこれらの中身のkey, valueは取得しない方向で考えています。

よろしくお願いします。

最も単純には以下で可能ですが、入れ子の部分をどう処理したいですか?

dt = Newtonsoft.Json.JsonConvert.DeserializeObject(of DataTable)(jo("value").Value(Of JArray).ToString)

1 Like

早速の回答ありがとうございます!試してみます。

"MachineRobots"の方は、
“MachineId”, “MachineName”, “RobotId”, “RobotUserName”, “SessionId”, “SessionName”
がCSVの列として追加され、行として各データが追加されていくようにできればありがたいです。

"Tags"の方は取得不要です。

"MachineRobots": [
        {
          "MachineId": 111111,
          "MachineName": "MC_Example_Windows_05",
          "RobotId": 11111,
          "RobotUserName": null,
          "SessionId": 1111111,
          "SessionName": null
        }
      ],
      "Tags": []

この項目は配列なので、複数の項目が存在する可能性があります。
その場合どのように処理いたいでしょうか?

"MachineRobots"の部分は現状1要素のみのトリガーしかありませんでしたので、配列の1つ目の要素値のみ取得してCSVに反映したいと考えています。

ちなみに、

  • Orchestratorの全フォルダ名をAPIで取得
  • フォルダの数だけ繰り返しJSONデータを取得してデータテーブルに変換
  • 都度CSVファイルに追記、データテーブルを初期化

このような運用を考えています。
そのため

  • JSONからデータテーブルへの変換時の列数は常に一定である必要がある
  • ヘッダー行がCSVに繰り返し含まれないように、データテーブルへの変換時・CSVへの追記時に工夫する必要がある

と考えております。
細かい点の説明が欠けていて申し訳ありません。

やりたいことを勘案すると例えば以下でしょうか。

Sample
Sample20250403-1.zip (13.6 KB)

最終がCSVがよければWriteCSVに置き換えてください。

単純な方法でのJSON→CSV変換はできました。助かりました。

入れ子の部分の処理についてはいただいたアドバイスを参考に色々と試行してみたいと思います。

ありがとうございました。