#はじめに
Automation 360でJSONパーサーを使うとき、ちょっとハマったのでメモ。
##操作例としてやった事
- Automation 360のREST Webサービスを使いAutomation 360のコントロールルームに接続。
- コントロールルームからの応答をJSONで受け取る
- 受け取ったJSONをAutomation 360の「JSONParser」で解析して一部を表示させる。
##おことわり
Automation 360 Community Edition build9637で試しました。
(community.cloudです。community2.cloud-2にはありません)
製品版に「JSONParser」が入ってくるときには異なるかもしれません。
#手順
(1)RESTでコントロールルームに接続
-
コントロールルームに接続 を使用
-
URIに「https://community2.cloud-2.automationanywhere.digital/v1/authentication」
-
認証モード:認証なし
-
変数に出力を代入で適当な辞書変数に格納(変数RestResponseとします)
(2)レスポンスを確認
うまく接続できたかどうか$RestResponse{Body}$を確認します。
(3)「JSONParser: JSON to Dictionary」でJSONを辞書変数に。
- 仮に変数JsonDictとします。サブタイプを「任意」に指定すること(1つ目のハマり点)。
(4)変数JsonDictを表示してみる。
今回のRESTの戻りは以下のようになっています。
{
"token":"eyJhb(認証トークンの文字列)HIqh9w",
"user":{"id":999999,"username":"ログイン用のID","domain":null,
"version":32,"principalId":7777777,"deleted":false,
"roles":[{"name":"AAE_Bot Insight Expert", .....
続けてサービスを受けるためのtokenの取り出しは簡単。
辞書のキーをtokenにして、$JsonDict{token}$ でOK。
userの中のusernameを取る所が2つ目のハマり点。
結論としてうまくいったのは以下。
- ディクショナリの代入で、$JsonDict{user}$を新たな辞書変数(仮にuserDict)に入れる。
- $userDict{username}$で、取り出しOK。
- idのように数値型を取るときには、$userDict{id}.Number:toString$
BotStoreにあるJSONParserのReadmeを見て、
キーをuser.usernameとしたのがハマりの元(これではダメでした)。
BotStoreのJSONParserはメソッドの数が少し違うし、
Community Editionに入ったJSONParserとはちょっと違う?
#さいごに
複雑なJSONなら「JSON Object Manager」を使った方が良いかもしれません。
詳しくは以下に。
https://qiita.com/etoootak/items/6c508d2bfa6b1f1ac735
「JSON Object Manager」はネストが深い所でも一発で取れて便利だけど
戻りが全て文字列になるので、用途によって使い分けかな。
おまけ
あ、JSON Paser, JSON Object Manager は
community.cloud.automationanywhere.digital にはデフォルトで入っているけど
community2.cloud-2.automationanywhere.digital には無いじゃないか。
[2022/04/21追記]
Automation360 v24で、「Json」パッケージが追加されました。
使い方は、ここで書いたBotStoreの「JSON Paser」「JSON Object Manager」とまた異なります。
「Json」パッケージは、現在のところJsonの読み出しだけで、Jsonテキストを作る用途で今使えるのは「Json Paser」パッケージの「Disctionary to JSON」アクションだけかな。