14.5. 일반적인 변환 패턴


이벤트 데이터를 효과적으로 형성하는 데 일반적인 JSONata 변환 패턴을 활용하여 이벤트를 보존, 추출, 재구성 또는 조건부로 수정할 수 있습니다.

14.5.1. 원래 이벤트 구조를 보존

나머지 이벤트를 변경하지 않고 유지하면서 속성을 추가하거나 조정할 수 있으므로 다운스트림 소비자가 최소한의 수정으로 원래 데이터를 수신할 수 있습니다.

원래 이벤트 구조를 유지하면서 정적 특성을 추가하는 예

{
  "specversion": "1.0",
  "id": id,
  "type": type,
  "source": source,
  "time": time,
  "data": data,
  "newattribute": "static value"
}
Copy to Clipboard Toggle word wrap

14.5.2. 특성으로 필드 추출

페이로드에서 최상위 CloudEvent 속성으로 값을 승격하여 필터링 및 라우팅을 더 쉽게 수행할 수 있습니다.

페이로드에서 사용자 ID 및 리전을 추출하여 속성으로 노출하는 예

{
  "specversion": "1.0",
  "id": id,
  "type": "user.event",
  "source": source,
  "time": time,
  "userid": data.user.id,
  "region": data.region,
  "data": $
}
Copy to Clipboard Toggle word wrap

JSONata에서 $ 기호는 전체 입력 오브젝트를 나타냅니다. data: $ 는 선택한 필드를 승격하는 동안 원래 이벤트 페이로드를 유지합니다.

14.5.3. 이벤트 데이터 재구성

JSONata를 사용하여 페이로드를 재구성하고 필드 이름 변경, 오브젝트 중첩 및 계산을 수행하여 다른 시스템에서 필요한 스키마로 이벤트를 변환합니다.

주문 이벤트를 재구성하고 총 항목 값을 계산하는 예

{
  "specversion": "1.0",
  "id": order.id,
  "type": "order.transformed",
  "source": "transform.order-processor",
  "time": order.time,
  "orderid": order.id,
  "data": {
    "customer": {
      "id": order.user.id,
      "name": order.user.name
    },
    "items": order.items.{ "sku": sku, "quantity": qty, "price": price },
    "total": $sum(order.items.(price * qty))
  }
}
Copy to Clipboard Toggle word wrap

위의 변환과 이 JSON 개체가 입력으로 제공됩니다.

{
  "order": {
    "time": "2024-04-05T17:31:05Z",
    "id": "8a76992e-cbe2-4dbe-96c0-7a951077089d",
    "user": {
      "id": "bd9779ef-cba5-4ad0-b89b-e23913f0a7a7",
      "name": "John Doe"
    },
    "items": [
      {"sku": "KNATIVE-1", "price": 99.99, "qty": 1},
      {"sku": "KNATIVE-2", "price": 129.99, "qty": 2}
    ]
  }
}
}
Copy to Clipboard Toggle word wrap

변환은 다음 출력을 생성합니다.

{
  "specversion": "1.0",
  "id": "8a76992e-cbe2-4dbe-96c0-7a951077089d",
  "type": "order.transformed",
  "source": "transform.order-processor",
  "time": "2024-04-05T17:31:05Z",
  "orderid": "8a76992e-cbe2-4dbe-96c0-7a951077089d",
  "data": {
    "customer": {
      "id": "bd9779ef-cba5-4ad0-b89b-e23913f0a7a7",
      "name": "John Doe"
    },
    "items": [
      {
        "sku": "KNATIVE-1",
        "quantity": 1,
        "price": 99.99
      },
      {
        "sku": "KNATIVE-2",
        "quantity": 2,
        "price": 129.99
      }
    ],
    "total": 359.97
  }
}
Copy to Clipboard Toggle word wrap

이 패턴을 사용하여 특정 구조 또는 계산된 필드가 필요한 API와 통합합니다.

14.5.4. 조건부 변환

JSONata를 사용하면 조건부 논리를 변환에 직접 포함시켜 특성 또는 페이로드 값을 기반으로 동적 이벤트 셰이핑을 활성화할 수 있습니다.

조건에 따라 다양한 유형 및 우선순위 적용 예

{
  "specversion": "1.0",
  "id": id,
  "type": type = "order.created" ? "new.order" : "updated.order",
  "source": source,
  "time": time,
  "priority": data.total > 1000 ? "high" : "normal",
  "data": $
}
Copy to Clipboard Toggle word wrap

다음 예제에서는 다음을 수행합니다.

  • 이벤트 유형이 order.created 인 경우 새 유형은 new.order 가 됩니다. 그렇지 않으면 updated.order 로 설정됩니다.
  • 페이로드의 총 필드가 1000보다 크면 값이 high우선순위 속성이 추가됩니다. 그렇지 않으면 normal 로 설정됩니다.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat