Azure Logic Apps를 사용하는 워크플로의 맵으로 Liquid 템플릿을 사용하여 JSON 및 XML 변환

적용 대상: Azure Logic Apps(사용량 + 표준)

논리 앱 워크플로에서 기본 JSON 변환을 수행하려는 경우 빌드 작업 또는 JSON 구문 분석 작업과 같은 기본 제공 데이터 작업을 사용할 수 있습니다. 그러나 일부 시나리오에는 반복, 제어 흐름 및 변수와 같은 요소를 포함하는 복잡한 고급 변환이 필요할 수 있습니다. JSON에서 JSON으로, JSON에서 텍스트로, XML에서 JSON으로 또는 XML에서 텍스트로 변환의 경우 Liquid 오픈 소스 템플릿 언어를 사용하여 필요한 매핑 또는 변환을 설명하는 템플릿을 만들 수 있습니다. 워크플로에 Liquid 기본 제공 작업을 추가할 때 이 템플릿을 선택할 수 있습니다. 다중 테넌트 소비 논리 앱 워크플로 및 단일 테넌트 표준 논리 앱 워크플로에서 Liquid 작업을 사용할 수 있습니다.

사용할 수 있는 Liquid 트리거는 없지만, 아무 트리거 또는 작업을 사용하여 원본 JSON 또는 XML 콘텐츠를 워크플로에 공급할 수 있습니다. 예를 들어 기본 제공 커넥터 트리거, Azure Logic Apps 또는 다른 앱에서 사용할 수 있는 관리형 커넥터 트리거 또는 Azure 호스팅 커넥터 트리거를 사용할 수 있습니다.

이 문서에서는 다음 작업을 완료하는 방법을 보여 줍니다.

  • Liquid 템플릿을 만듭니다.
  • 사용량 논리 앱 워크플로의 경우 통합 계정에 템플릿을 업로드하거나 모든 하위 워크플로에서 사용하기 위해 표준 논리 앱 리소스에 템플릿을 업로드합니다.
  • 워크플로에 Liquid 작업을 추가합니다.
  • 사용하려는 맵으로 템플릿을 선택합니다.

자세한 내용은 다음 설명서를 검토하세요.

필수 조건

  • Azure 계정 및 구독 구독이 없는 경우 Azure 체험 계정에 등록합니다.

  • 논리 앱 리소스 및 워크플로. Liquid 작업에는 사용 가능한 트리거가 없으므로 워크플로에 최소한의 트리거가 포함되어야 합니다. 자세한 내용은 다음 설명서를 참조하세요.

  • 사용량 또는 표준 논리 앱 워크플로에서 작업하는지 여부에 따라 통합 계정 리소스가 필요합니다. 일반적으로 엔터프라이즈 통합 및 B2B 워크플로에서 사용할 아티팩트를 정의하고 저장하려는 경우 이 리소스가 필요합니다.

    Important

    함께 작업하려면 통합 계정과 논리 앱 리소스가 모두 동일한 Azure 구독 및 Azure 지역에 있어야 합니다.

    • 사용량 논리 앱 워크플로에서 작업하는 경우 통합 계정에 논리 앱 리소스에 대한 링크가 필요합니다.

    • 표준 논리 앱 워크플로에서 작업하는 경우 다음 시나리오에 따라 통합 계정을 논리 앱 리소스에 연결하거나 논리 앱 리소스에 직접 맵을 업로드하거나 둘 다 할 수 있습니다.

      • 필요하거나 사용하려는 아티팩트가 있는 통합 계정이 이미 있는 경우 아티팩트를 사용하려는 여러 표준 논리 앱 리소스에 통합 계정을 연결할 수 있습니다. 이렇게 하면 각 개별 논리 앱에 맵을 업로드할 필요가 없습니다. 자세한 내용은 논리 앱 리소스를 통합 계정에 연결을 참조하세요.

      • 기본 제공 커넥터인 Liquid를 사용하면 이전에 논리 앱 리소스 또는 연결된 통합 계정에 업로드한 맵을 선택할 수 있지만, 둘 다 선택할 수는 없습니다. 그런 다음 동일한 논리 앱 리소스 내의 모든 하위 워크플로에서 이러한 아티팩트를 사용할 수 있습니다.

      따라서 통합 계정이 없거나 필요한 경우 업로드 옵션을 사용할 수 있습니다. 그렇지 않은 경우 연결 옵션을 사용할 수 있습니다. 어느 쪽이든 동일한 논리 앱 리소스 내의 모든 하위 워크플로에서 이러한 아티팩트를 사용할 수 있습니다.

  • Liquid 템플릿 언어에 대한 기본 지식 Azure Logic Apps는 DotLiquid 2.0.361을 사용합니다.

    참고 항목

    JSON을 JSON으로 변환이라는 Liquid 작업은 Liquid에 대한 DotLiquid 구현을 따르며, Liquid에 대한 Shopify 구현과는 특정 경우에 다릅니다. 자세한 내용은 Liquid 템플릿 고려 사항을 참조하세요.

1단계: 템플릿 만들기

논리 앱 워크플로에서 Liquid 변환을 수행하려면, 먼저 원하는 매핑을 정의하는 Liquid 템플릿을 생성해야 합니다.

  1. JSON 변환을 위한 맵으로 사용할 Liquid 템플릿을 생성합니다. 원하는 편집 도구를 사용할 수 있습니다.

    이 문서의 JSON에서 JSON으로 변환 예에서는 다음 샘플 Liquid 템플릿을 사용합니다.

    {%- assign deviceList = content.devices | Split: ', ' -%}
    
    {
       "fullName": "{{content.firstName | Append: ' ' | Append: content.lastName}}",
       "firstNameUpperCase": "{{content.firstName | Upcase}}",
       "phoneAreaCode": "{{content.phone | Slice: 1, 3}}",
       "devices" : [
          {%- for device in deviceList -%}
             {%- if forloop.Last == true -%}
             "{{device}}"
             {%- else -%}
             "{{device}}",
             {%- endif -%}
          {%- endfor -%}
       ]
    }
    
  2. Liquid 템플릿(.liquid) 파일 확장자를 사용하여 템플릿을 저장합니다. 이 예에서는 SimpleJsonToJsonTemplate.liquid를 사용합니다.

2단계: Liquid 템플릿 업로드

Liquid 템플릿을 만든 후 이제 다음 시나리오에 따라 템플릿을 업로드해야 합니다.

통합 계정에 템플릿 업로드

  1. Azure Portal에서 Azure 계정 자격 증명을 사용하여 로그인합니다.

  2. Azure Portal 검색 상자에 통합 계정을 입력하고 통합 계정을 선택합니다.

    Screenshot showing the Azure portal search box with

  3. 통합 계정 찾기 및 선택.

    Screenshot showing integration accounts pane with integration account selected.

  4. 통합 계정의 탐색 메뉴에 있는 설정에서 을 선택합니다.

    Screenshot showing integration account navigation menu with

  5. 창에서 추가를 선택합니다. 맵에 대한 다음 정보를 제공합니다.

    속성 설명
    이름 JsonToJsonTemplate 이 예제의 "JsonToJsonTemplate"인 지도의 이름입니다.
    지도 유형 Liquid 지도의 형식입니다. JSON부터 JSON 변환의 경우 Liquid를 선택해야 합니다.
    Map SimpleJsonToJsonTemplate.liquid 변환에 사용할 기존 Liquid 템플릿 또는 맵 파일로, 이 예제에서는 "SimpleJsonToJsonTemplate.liquid"입니다. 이 파일을 찾으려면 파일 선택기를 사용할 수 있습니다. 지도 크기 제한은 제한 및 구성을 참조하세요.

    Screenshot showing

표준 논리 앱에 템플릿 업로드

  1. Azure Portal에서 논리 앱 리소스를 찾아 엽니다. 워크플로 수준이 아니라 리소스 수준에 있는지 확인합니다.

  2. 논리 앱 리소스의 탐색 메뉴에 있는 아티팩트에서 을 선택합니다.

  3. 창 도구 모음에서 추가를 선택합니다.

  4. 맵 추가 창에서 템플릿에 대한 다음 정보를 제공합니다.

    속성 설명
    이름 JsonToJsonTemplate 이 예제의 "JsonToJsonTemplate"인 지도의 이름입니다.
    지도 유형 Liquid 지도의 형식입니다. JSON부터 JSON 변환의 경우 Liquid를 선택해야 합니다.
    Map SimpleJsonToJsonTemplate.liquid 변환에 사용할 기존 Liquid 템플릿 또는 맵 파일로, 이 예제에서는 "SimpleJsonToJsonTemplate.liquid"입니다. 이 파일을 찾으려면 파일 선택기를 사용할 수 있습니다. 지도 크기 제한은 제한 및 구성을 참조하세요.
  5. 완료되면 확인을 선택합니다.

    맵 파일 업로드가 완료되면 목록에 해당 맵이 나타납니다. 통합 계정의 개요 페이지에 있는 아티팩트에서 업로드한 맵이 표시됩니다.

3단계: Liquid 변환 작업 추가

다음 단계에서는 사용량 및 표준 논리 앱 워크플로에 대한 Liquid 변환 작업을 추가하는 방법을 보여 줍니다.

  1. 아직 열려 있지 않은 경우 Azure Portal의 디자이너에서 논리 앱 워크플로를 엽니다.

  2. 워크플로에 트리거 또는 워크플로에 필요한 다른 작업이 없는 경우 먼저 해당 작업을 추가합니다. Liquid 작업에는 사용할 수 있는 트리거가 없습니다.

    이 예는 HTTP 요청이 수신될 때라는 요청 트리거로 계속됩니다.

  3. 워크플로 디자이너의 Liquid 작업을 추가할 단계 아래에서 새 단계를 선택합니다.

  4. 작업 검색 선택 상자에서 모두를 선택합니다. 검색 상자에 liquid를 입력합니다.

  5. 작업 목록에서 사용하려는 Liquid 작업을 선택합니다.

    이 예에서는 JSON을 JSON으로 변환이라는 작업을 계속 사용합니다.

    Screenshot showing Consumption workflow designer with a Liquid action selected.

  6. 작업의 콘텐츠 속성에서 다음 단계에 따라 변환하려는 트리거 또는 이전 작업의 JSON 출력을 제공합니다.

    1. 콘텐츠 상자 내부를 클릭하여 동적 콘텐츠 목록을 표시합니다.

    2. 동적 콘텐츠 목록에서 변환할 JSON 데이터를 선택합니다.

      이 예의 경우 동적 콘텐츠 목록의 HTTP 요청이 수신될 때에서 트리거의 본문 콘텐츠 출력을 나타내는 본문 토큰을 선택합니다.

      Screenshot showing Consumption workflow, Liquid action's

  7. 목록에서 Liquid 템플릿을 선택합니다.

    이 예는 JsonToJsonTemplate이라는 템플릿으로 계속됩니다.

    Screenshot showing Consumption workflow, Liquid action's

    참고 항목

    맵 목록이 비어 있는 경우 논리 앱 리소스가 통합 계정에 연결되지 않았거나 통합 계정에 맵 파일이 없는 것입니다.

    완료되면 작업은 다음 예와 유사합니다.

    Screenshot showing Consumption workflow with finished

  8. 워크플로를 저장합니다. 디자이너 도구 모음에서 저장을 선택합니다.

워크플로 테스트

  1. Postman 또는 비슷한 도구와 POST 메서드를 사용하여 요청 트리거의 URL에 대한 호출을 보내고(요청 트리거의 HTTP POST URL 속성에 표시됨), 변환할 JSON 입력을 포함합니다. 예를 들면 다음과 같습니다.

    {
       "devices": "Surface, Mobile, Desktop computer, Monitors",
       "firstName": "Dean",
       "lastName": "Ledet",
       "phone": "(111)0001111"
    }
    
  2. 워크플로 실행이 완료되면 워크플로의 실행 기록으로 이동하고 JSON 변환 작업의 입력 및 출력을 검사합니다. 예를 들면 다음과 같습니다.

    Screenshot showing example output.

기타 Liquid 변형

Liquid를 사용하여 다음과 같은 다른 변환을 수행할 수 있습니다.

JSON을 텍스트로 변환

다음 Liquid 템플릿은 JSON을 텍스트로 변환하는 예를 보여 줍니다.

{{content.firstName | Append: ' ' | Append: content.lastName}}

다음 예는 샘플 입출력을 보여 줍니다.

Screenshot showing example output for JSON to text transformation.

XML을 JSON으로 변환

다음 Liquid 템플릿은 XML을 JSON으로 변환하는 예를 보여 줍니다.

[{% JSONArrayFor item in content -%}
      {{item}}
  {% endJSONArrayFor -%}]

JSONArrayFor 루프는 후행 쉼표를 사용하지 않는 JSON 페이로드를 생성할 수 있도록 해주는 XML 입력에 대한 사용자 지정 반복 메커니즘입니다. where 또한 이 사용자 지정 루핑 메커니즘의 조건은 다른 Liquid 필터와 같이 요소의 값이 아닌 비교를 위해 XML 요소의 이름을 사용합니다. 자세한 내용은 집합체 정책에 대한 심층 정보 - 모음을 참조하세요.

다음 예는 샘플 입출력을 보여 줍니다.

Screenshot showing example output for XML to JSON transformation.

XML에서 텍스트로 변환

다음 Liquid 템플릿은 XML을 텍스트로 변환하는 예를 보여 줍니다.

{{content.firstName | Append: ' ' | Append: content.lastName}}

다음 예는 샘플 입출력을 보여 줍니다.

Screenshot showing example output for XML to text transformation.

Liquid 템플릿 고려 사항

  • Liquid 템플릿은 Azure Logic Apps의 에 대한 파일 크기 제한을 따릅니다.

  • JSON을 JSON으로 변환 작업은 Liquid용 DotLiquid 구현을 따릅니다. 이 구현은 Liquid에 대한 Shopify 구현에서 .NET Framework로의 포트이며 특정 경우에 다릅니다.

    다음 목록은 알려진 차이점을 설명합니다.

    • JSON을 JSON으로 변환 작업은 기본적으로 JSON, XML, HTML 등을 포함할 수 있는 문자열을 출력합니다. Liquid 작업은 Liquid 템플릿의 예상 텍스트 출력이 JSON 문자열임을 나타냅니다. 이 작업은 입력을 JSON 개체로 구문 분석하도록 논리 앱에 지시하고 Liquid가 JSON 구조를 해석할 수 있도록 래퍼를 적용합니다. 변환 후 작업은 Liquid에서 JSON으로 텍스트 출력을 구문 분석하도록 논리 앱에 지시합니다.

      DotLiquid는 기본적으로 JSON을 이해하지 못하므로 백슬래시 문자(\) 및 기타 예약된 JSON 문자를 이스케이프해야 합니다.

    • 템플릿에서 Liquid 필터를 사용하는 경우 문장 대/소문자를 사용하는 DotLiquid 및 C# 명명 규칙을 따라야 합니다. 모든 Liquid 변환의 경우 템플릿의 필터 이름도 문장 대/소문자를 사용해야 합니다. 그렇지 않으면 필터가 작동하지 않습니다.

      예를 들어 필터Replacereplace를 사용하는 경우 .replace DotLiquid 온라인에서 예제를 사용해 보면 동일한 규칙이 적용됩니다. 자세한 내용은 Shopify Liquid 필터DotLiquid Liquid 필터를 참조하세요. Shopify 사양에는 각 필터에 대한 예제가 포함되어 있으므로 비교를 위해 DotLiquid - 온라인 사용해 보기에서 이러한 예제를 사용해 볼 수 있습니다.

    • Shopify 확장 필터의 json 필터는 현재 DotLiquid에서 구현되지 않습니다. 일반적으로 이 필터를 사용하여 JSON 문자열 구문 분석용 텍스트 출력을 준비할 수 있지만 대신 필터를 Replace 사용해야 합니다.

    • DotLiquid 구현의 표준 Replace 필터는 정규식(RegEx) 일치를 사용하는 반면, Shopify 구현은간단한 문자열 일치를 사용합니다. 두 구현 모두 RegEx 예약 문자 또는 일치 매개 변수의 이스케이프 문자를 사용할 때까지 동일한 방식으로 작동합니다.

      예를 들어 RegEx 예약 백슬래시(\) 이스케이프 문자를 이스케이프하려면 다음을 사용하지 않고 | Replace: '\', '\\'사용합니다| Replace: '\\', '\\'. 다음 예제에서는 백슬래시 문자를 이 Replace 스케이프하려고 할 때 필터가 어떻게 다르게 동작하는지 보여 줍니다. 이 버전이 성공적으로 작동하는 동안:

      { "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\\', '\\' | Replace: '"', '\"'}}"}

      이 결과를 사용하여 다음을 수행합니다.

      { "SampleText": "The quick brown fox \"jumped\" over the sleeping dog\\\\"}

      이 버전은 실패합니다:

      { "SampleText": "{{ 'The quick brown fox "jumped" over the sleeping dog\\' | Replace: '\', '\\' | Replace: '"', '\"'}}"}

      이 오류와 함께:

      { "SampleText": "Liquid error: parsing "\" - Illegal \ at end of pattern."}

      자세한 내용은 RegEx 패턴 일치를 사용하는 표준 필터 바꾸기...를 참조하세요.

    • DotLiquid 구현필터는 Sort 배열 또는 컬렉션의 항목을 속성별로 정렬하지만 다음과 같은 차이점이 있습니다.

다음 단계