다음을 통해 공유


ParseJSON 함수

적용 대상: 캔버스 앱 모델 기반 앱 Power Pages Power Platform CLI

JSON 문자열을 해석하여 형식화되지 않은 개체 또는 형식화된 개체를 반환합니다.

중요

Description

ParseJSON 함수는 유효한 JSON 문자열을 구문 분석하고 JSON 구조를 나타내는 형식화되지 않은 개체를 반환합니다.

필요에 따라 두 번째 인수를 사용하여 JSON을 Power Fx 수식에서 직접 사용할 수 있는 형식화된 개체로 변환합니다. 이렇게 하면 사용 시점의 변환 및 강제 변환이 더 이상 필요하지 않으므로 결과를 더 쉽게 사용할 수 있습니다. 형식화되지 않은 JSON은 다음 규칙을 사용하여 형식에 매핑됩니다.

  • JSON에 없는 형식의 열은 공백으로 채워집니다.
  • 형식에 없는 JSON의 열은 무시됩니다.
  • 형식 및 JSON에 모두 있는 열의 경우 JSON 값을 형식으로 강제 변환할 수 있어야 합니다.

ParseJSON 함수는 텍스트가 ECMA-404IETF RFC 8259에 설명된 JavaScript Object Notation(JSON) 형식에 따른 유효한 JSON이 아닌 경우 오류를 반환할 수 있습니다.

구문

ParseJSON( JSONString [ , Type ] )

  • JSONString – 필수 항목입니다. 텍스트로 표현되는 JSON 구조입니다.
  • 형식 - 선택 사항입니다. JSON 구조에 대한 Power Fx 형식 정의입니다. 이 인수가 없으면 ParseJSON은 형식화되지 않은 개체를 반환합니다. 이 인수와 함수가 있으면 강력한 형식의 개체가 반환됩니다.

무형식 개체 데이터 형식 변환

두 번째 인수가 없으면 ParseJSON은 지원되는 데이터 유형의 필드 값을 명시적으로 변환해야 하는 형식화되지 않은 개체를 반환합니다. 다음 표에는 Power Apps의 데이터 형식 및 해당 JSON 데이터 형식 및 변환 방법이 나와 있습니다.

데이터 형식 JSON 예시 Description 예시 변환
부울 { "bool": true } 부울은 JSON의 명시적 유형이며 직접 변환할 수 있습니다. 부울( ParseJSON("{ ""bool"": true }").bool )
색상 { "color": "#102030" }
{ "r": 255, "g": 128, "b": 0, "a": 0.5 }
JSON에는 색상 유형이 없습니다. 색상 값은 RGBA 정수 또는 16진수 문자열에서 만들 수 있습니다. ColorValue( ParseJSON( "{ ""color"": ""#102030"" }" ).color )
With( { uo: ParseJSON( "{ ""r"": 255, ""g"": 128, ""b"": 0, ""a"": 0.5 }" ) }, RGBA( Value( uo.r ), Value( uo.g ), Value( uo.b ), Value( uo.a ) ) )
통화, 숫자 { "numbervalue": 123.5 } 숫자는 소수점 구분 기호로 마침표( . )를 사용하여 JSON으로 직접 표시됩니다. 값( ParseJSON("{ ""numbervalue"": 123.5 }").numbervalue )
날짜, 날짜/시간, 시간 { "start": "2022-05-10" }
{ "start": "23:12:49.000" }
JSON에는 날짜 또는 시간 유형이 없으므로 날짜와 시간을 문자열로만 나타낼 수 있습니다. 형식이 지정되지 않은 개체는 ISO 8601 형식의 문자열에서 날짜, 시간 또는 날짜/시간으로 직접 변환될 수 있습니다. 다른 형식의 경우 먼저 Text() 함수를 사용하여 JSON 필드를 텍스트로 변환한 다음 기본적으로 현재 사용자 설정의 언어를 사용하는 DateValue(), TimeValue() 또는 DateTimeValue() 함수를 사용합니다. DateValue( ParseJSON("{ ""appointment"": ""2022-05-10"" }").appointment )
DateValue( Text( ParseJSON("{ ""appointment"": ""May 5, 2022"" }").appointment ) )
GUID { "id": "123e4567-e89b-12d3-a456-426655440000" } JSON에는 GUId에 대한 데이터 유형이 없으므로 문자열로만 표시할 수 있습니다. GUID( ParseJSON("{ ""id"": ""123e4567-e89b-12d3-a456-426655440000"" }").id )
하이퍼 링크, 이미지, 미디어 { "URI": "https://northwindtraders.com/logo.jpg" } 이러한 데이터 형식은 텍스트 데이터 형식이며 텍스트로 변환하여 Power Apps에서 사용할 수 있습니다. Text( ParseJSON("{ ""URI"": ""https://northwindtraders.com/logo.jpg"" }").URI )
선택 항목 { "status": 1 }
{ "status": "Closed" }
선택 항목은 숫자로 뒷받침되는 현지화된 문자열로 표시됩니다. JSON() 함수는 선택 항목을 지원 번호로 직렬화합니다. 숫자 또는 문자열에서 선택으로 직접 변환하는 기능은 없지만 Switch() 또는 If() 함수를 텍스트 또는 숫자 값에 사용할 수 있습니다. Switch( Value( ParseJSON( "{ ""status"": 1 }" ).status ), 0, Status.Open, 1, Status.Closed )
녹음 { "field": "value" } JSON 개체에서 레코드 구조로의 직접 변환은 없지만 무형식 개체에서 개별 필드를 검색하여 레코드를 형성할 수 있습니다. { field: Text( ParseJSON( "{ ""field"": ""value"" }" ).field ) }
레코드 참조 해당 없음 레코드 참조는 데이터 소스에 고유하며 직렬화하거나 직렬화 해제할 수 없습니다. 고유 키를 나타내는 필드 값은 조회할 수 있는 레코드를 식별하기 위해 JSON에서 사용할 수 있습니다. 해당 없음
테이블 [ { "id": 1, "name": "one" }, { "id": 2, "name": "two" } ]
[1, 2, 3]
JSON은 테이블로 변환할 수 있는 배열을 포함할 수 있습니다. 이러한 값은 레코드 배열이거나 사실상 단일 열 테이블인 값 배열일 수 있습니다. ParseJSON() 배열은 무형식 개체의 단일 열 테이블로만 변환될 수 있으며, 그대로 사용하거나 ForAll()을 사용하여 유형이 지정된 레코드 테이블로 변환할 수 있습니다. ForAll( Table( ParseJSON( "[ { ""id"": 1, ""name"": ""one"" }, { ""id"": 2, ""name"": ""two"" } ]" ) ), { id: Value(ThisRecord.Value.id), name: Text(ThisRecord.Value.name) } )
문자 { "stringField": "this is text" } 텍스트는 JSON의 명시적 유형이며 직접 변환할 수 있습니다. Text( ParseJSON( "{ ""stringField"": ""this is text"" }").stringField )
두 가지 옵션 { "available": true }
{ "available": "Yes" }
두 가지 옵션이 부울로 뒷받침되는 현지화된 문자열로 제공됩니다. JSON() 함수는 두 가지 옵션을 부울 값으로 직렬화합니다. 부울, 숫자 또는 문자열을 두 가지 옵션으로 직접 변환할 수는 없지만 텍스트, 숫자 또는 부울 값에 Switch() 또는 If() 함수를 사용할 수 있습니다. Switch( Boolean( ParseJSON( "{ ""available"": true }" ).available ), false, Availability.No, true, Availability.Yes )

필드 값 액세스

JsonString이라는 변수에 다음 JSON 문자열이 있는 경우

{ "parent": { "child": "text value" }, "number": 567 }
  1. 다음 수식은 텍스트 text value을 반환합니다.
    Text( ParseJSON( JsonString ).parent.child )
    
  2. 다음 수식은 숫자 567을 반환합니다.
    Value( ParseJSON( JsonString ).number )
    

필드 이름이 잘못된 식별자 이름으로 구성된 경우 필드 이름을 작은 따옴표로 묶을 수 있습니다. JsonString이라는 변수에 다음 JSON 문자열이 있는 경우

{ "0": { "child-field": "text value" } }
  1. 다음 수식은 텍스트 text value을 반환합니다.
    Text( ParseJSON( JsonString ).'0'.'child-field' )
    

공백

JsonString이라는 변수에 다음 JSON 문자열이 있는 경우

{ "text": "text value" , "number": 567, "empty": null }
  1. 존재하지 않는 필드에 액세스하려고 하면 Blank()가 반환됩니다. 다음 수식은 true를 반환합니다.
    IsBlank( Text( ParseJSON( JsonString ).parent.child ) )
    
  2. JSON null 값은 Blank()로 간주됩니다. 다음 수식은 true를 반환합니다.
    IsBlank( Text( ParseJSON( JsonString ).empty ) )
    

단순 배열

JsonString이라는 변수에 다음 JSON 문자열이 있는 경우

{ "array": [1, 2, 3] }
  1. 무형식 개체의 배열 필드 단일 열 테이블에서 두 번째 숫자에 액세스하고 Value()를 사용하여 숫자로 변환하면 2가 반환됩니다.
    Value( Index( ParseJSON( JsonString ).array, 2 ) )
    
  2. 배열 필드에 있는 무형식 개체의 단일 열 테이블을 숫자 { Value: 1 }, { Value: 2 }, { Value: 3 }의 단일 열 테이블로 변환:
    ForAll( ParseJSON( JsonString ).array, Value( ThisRecord ) )
    

레코드 배열

JsonString이라는 변수에 다음 JSON 문자열이 있는 경우

{ "array": [
    { "id": 1, "name": "One"},
    { "id": 2, "name": "Two"}
    ] }
  1. ForAll()을 사용하여 유형이 지정된 레코드 테이블로 직접 변환하는 것은 ThisRecord.[fieldname]를 사용하여 무형식 개체 필드에 액세스하고 이를 알려진 유형으로 변환함으로써 수행할 수 있습니다.

    ForAll( ParseJSON( JsonString ).array, { id: Value(ThisRecord.id), name: Text(ThisRecord.name) })
    

배열에서 테이블

  1. Table() 함수를 사용하여 무형식 개체를 테이블로 변환하면 무형식 개체의 단일 열 테이블이 생성됩니다. 그런 다음 객체는 Value(단일) 열을 사용하여 액세스하고 앞에서 설명한 대로 유형으로 변환해야 합니다.

JsonString이라는 변수에 다음 JSON 문자열이 있는 경우

{ "array": [1, 2, 3] }

Table()은 배열의 숫자에 대한 단일 열 값이 있는 무형식 개체의 단일 열 테이블을 반환합니다...

 Set(untypedTable, Table( ParseJSON( JsonString ).array ));
 
 Value( Index(untypedTable, 1).Value.Value )
 ```

Given the following JSON string in a variable named `JsonString`
```JSON
{ "array": [
 { "id": 1, "name": "One"},
 { "id": 2, "name": "Two"}
 ] }

Table()은 배열의 각 json 개체를 나타내는 무형식 개체의 단일 열 테이블을 반환합니다.

  Set(untypedTable, Table( ParseJSON( JsonString ).array ) );
  
  Text( Index(untypedTable, 1).Value.name )