• 2024/05/04

Json과 Dictionary 간의 상호 변환

간혹 프로젝트를 진행하면서, Json과 Dictionary를 이용해야할 때가 종종 있다.
특히, Dictionary는 UiPath가 제공하는 Robotic Enterprise Framework(a.k.a REFramework)에서
Config.xlsx 내의 설정값들을 불러올 때, Config라는 Dictionary 변수에 저장해서 사용한다.

기본적으로 REFramework의 Config 변수는 Dictionary(Of String, Object) 타입이지만,
이 글에서는 Dictionary(Of String, String) 타입을 다룬다.

실습 전 준비 – REFramework Config 활용

변환하기 위한 첫 준비 단계로서, REFramework의 Main.xaml에 선언된 변수 중,
Config의 변수 타입을 Dictionary(Of String, String)으로 바꾼다.

이때, Invoke Workflow로 불러온 하위 xaml의 인수들이 모두 경고를 뿜어낼텐데,
모두 찾아서 인수의 타입을 바꿔준다.
필자의 경우, 총 6개의 파일을 수정해주었으며, 그에 따라 Main에 Invoke 된 인수들도 수정해주었다.

  • InitAllSettings.xaml
  • InitAllApplications.xaml
  • GetTransactionData.xaml
  • Process.xaml
  • SetTransactionStatus.xaml
  • RetryCurrentTransaction.xaml

이번 실습은 REFramewokr에서 이루어질 예정이며,
별도의 Queue를 적재하는 작업은 하지 않았기에, Process.xaml 이 아닌 InitAllApplication.xaml 에서 실습을 한다.

InitAllApplication.xaml에 네임 스페이스를 추가해주자.

Newtonsoft.Json
네임스페이스 추가

Dictionary to Json

네임 스페이스를 추가했다면, 다음과 같이 굉장히 간단하게 Assign 액티비티를 통해
String으로 변환할 수 있다.

Assign 하나로 String 으로 변환
JsonConvert.SerializeObject(in_Config)

Assign에 위와 같이 입력 후, REFramewokr를 실행하면 출력창에 다음과 같은 결과가 출력된다.

String으로 변환된 Config

이렇게 변환된 String을 txt 파일로 저장하거나, Orchestrator의 Asset에 Text 타입으로 저장하여 사용하기도 하며, 실제로 많은 사람들은 Text type Asset에 Json으로 변형된 String을 저장하여 쓰기도 한다.

이렇게 사용함으로써 편리해지는 점은, Unattended 환경에서 작업 중간 저장하여 사용하는 백업이나 현재 Step에서의 작업 결과 등을 임시로 저장함으로써 최대한 안정적이고 연속적인 로봇 업무를 수행하게 해주기 때문에, 어찌보면 알아두면 좋은 테크닉이 되기도 한다.

Json to Dictionary

이제 반대로, Json을 Dictionary 타입으로 변환하는 작업을 해보자.
먼저, 패키지 관리 메뉴로 들어가 ‘모든 패키지’에서 다음을 검색하고 설치한다.

WebAPI 패키지는 UiPath 공식 패키지로서, UiPath 도큐먼트포털에도 자세한 설명이 되어 있다.
(링크: https://docs.uipath.com/activities/docs/deserialize-json)

UiPath.WebAPI 패키지 설치

이 패키지 내에는 ‘Deserialize Json’이라는 액티비티가 포함되어 있다.
말 그대로 Json String 을 원하는 형태로 풀어주는 것.

액티비티의 속성들

여기서 우리는 JsonString에는 역시리얼화할 JsonString을 입력하는데,
앞서 Json으로 변환했던 String 변수인 str_Config를 넣자.
출력에는 dic_Config를 만들고, 타입은 Dictionary(Of String, String)으로 만들어 넣자.
그리고 기타 부분에 TypeArgument를 Dictionary(Of String, String)으로 변경하자.

Write Line 액티비티로 dic_Config 내용을 확인할 수 없으므로,
Deserialize JSON 액티비티 다음에 Write Line 액티비티를 배치하고, Break를 걸어둔다.

실행 후, 로컬 탭에서의 현재 상태

로컬 탭에서 지역변수인 dic_Config의 내용을 보면, 인수로서 입력받았던 in_Config와 같은 내용이 담겨져 있다.
이는 인수였던 in_Config를 str_Config로 변환했었고, 이어서 dic_Config로 변환했기 때문에 당연히 같은 내용이어야 한다.

무궁무진한 활용법

내부적으로 API를 사용하는 곳이라면, Dictionary -> Json 으로 변환하여 API를 POST할 수 있고,
반대로 Json으로 받은 데이터를 GET해서 내부 업무에 사용할 수 있을 것이다.

이와 같은 테크닉은 가끔 쓰이므로, 제대로 익혀두면 큰 도움이 되지 않을까 한다.

‘UiPath’ 관련 글

[catlist name=”uipath” date=yes]

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다