본문 바로가기
Azure로운 Power Platform/Power Platform

[Power Apps] 앱에서 JSON 파싱 (ParseJSON/fx 함수)

by Azure Racoon 2022. 9. 25.

오늘도 Azure로운 Power Platform :D

 

드디어 Power Apps에서 JSON을 파싱할 수 있게 되었습니다.

그동안은 MatchAll() 함수를 사용해서 정규표현식으로 JSON을 일일히 파싱하거나, Power Automate로 보내서 파싱한 후 다시 앱으로 보내는 방법을 사용하고 계셨을 겁니다.

 

MatchAll( ProductRecommendationsJSON, 
          """Score""\s*:\s*(?<Score>[^,]*)\s*,\s*" & 
          """ProductID""\s*:\s*""(?<ProductID>[^""]*)""\s*,\s*" & 
          """ProductName""\s*:\s*""(?<ProductName>[^""]*)""", MatchOptions.Multiline )

 

그러나 위와 같은 방법은 앱을 사용하는 도중 JSON이 조금이라도 바뀔 수도 있는 상황에선 적합하지 않을 수 있습니다. Power Automate를 사용하는 것 또한 번거로운 작업이죠.

 

이젠 ParseJSON() 함수로 편하게 Canvas app에서 바로 할 수 있게 되었습니다. 

 


ParseJSON

ParseJSON 함수를 Microsoft 에서는 다음과 같이 설명하고 있습니다.

The ParseJSON function will be the first (and for now the only) function to return an untyped object. It accepts a text value that is a valid JSON string.

ParseJSON 함수는 untyped object를 반환하는 첫(지금으로서는 단 하나의) 함수입니다. 이 함수는 JSON 문자열값을 받습니다.

 

가령 다음과 같은 JSON String을 반환하는 Connector가 있다고 가정합니다. (Connector 명 : connector1)

{
    "userID" : "A1022",
    "name" : "홍길동"
    "division" : "DX",
}

 

이 경우, 해당 JSON String을 ParseJSON() 함수를 통해 다음과 같이 사용할 수 있습니다.

Set( employeeInfo, ParseJSON( connector1.GetBody() ) )
employeeInfo.userID		// A1022
employeeInfo.name		// 홍길동
employeeInfo.division		// DX

 

단, employee.userID, employee.name, employee.divison 또한 데이터 타입이 untyped 이므로 따로 사용할 때는 아래와 같이 타입을 Text로 바꾸어야 합니다.

Text(employee.userID)
Text(employee.name)
Text(employee.division)

 


 

JSON String to Table

이 untyped JSON String을 바로 Table로 바꿀 수도 있습니다. (말그대로 untyped 였으니까요 :D)

JSON String을 ParseJSON() 함수를 사용하여 "untypedJSONTable"이라는 변수에 담았다고 가정합니다.

Set(
	untypedJSONTable,
	ParseJSON(
    	[
            { "id" : 1, "name" : "가길동" },
            { "id" : 2, "name" : "나길동" },
            { "id" : 3, "name" : "다길동" }
        ]
)

 

Table() 함수를 통해 Table로 변환할 수 있습니다.

Table(untypedJSONTable)

 

다만, untyped 였으므로 Table 속의 값들도 전부 untyped 입니다. Typed table로 바꾸려면 ForAll() 이라는 함수를 사용해 볼 수 있습니다.

ClearCollect(
    collection,
    ForAll(
        Table(untypedJSONTable),
        {
            id: Value(Value.id),
            name: Text(Value.name)
        }
    )
)

 


 

이번에 새로 나온 ParseJSON() 이라는 함수에 대해 정리해보았습니다. Power Apps에서 처음으로 리턴값이 untyped인 함수라는게 흥미롭네요. 효율을 굉장히 증가시켜줄 것으로 예상되는 함수입니다. 커뮤니티 반응도 뜨겁더라고요. :D

 

ParseJSON()은 release version 3.22091.11 부터 사용이 가능합니다.

댓글