14.6. 고급 JSONata 기능
JSONata를 사용하여 배열 처리 및 기본 제공 함수와 같은 고급 기능을 적용하여 이벤트를 보다 효과적으로 변환할 수 있습니다.
14.6.1. 배열 처리 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
JSONata를 사용하면 이벤트 페이로드에서 배열을 쉽게 사용할 수 있습니다. 항목을 계산하고 조건에 따라 필터링하고 집계 값을 계산할 수 있습니다.
주문에 있는 처리 항목의 예와 합계를 계산합니다.
{
"specversion": "1.0",
"id": id,
"type": "order.processed",
"source": source,
"time": $now(),
"itemcount": $count(order.items),
"multiorder": $count(order.items) > 1,
"data": {
"order": order.id,
"items": order.items[quantity > 1].{
"product": name,
"quantity": quantity,
"lineTotal": price * quantity
},
"totalvalue": $sum(order.items.(price * quantity))
}
}
이를 입력으로 사용할 수 있습니다.
{
"id": "12345",
"source": "https://example.com/orders",
"order": {
"id": "order-67890",
"items": [
{ "name": "Laptop", "price": 1000, "quantity": 1 },
{ "name": "Mouse", "price": 50, "quantity": 2 },
{ "name": "Keyboard", "price": 80, "quantity": 3 }
]
}
}
변환은 다음 출력을 생성합니다.
{
"specversion": "1.0",
"id": "12345",
"type": "order.processed",
"source": "https://example.com/orders",
"time": "2025-03-03T09:13:23.753Z",
"itemcount": 3,
"multiorder": true,
"data": {
"order": "order-67890",
"items": [
{ "product": "Mouse", "quantity": 2, "lineTotal": 100 },
{ "product": "Keyboard", "quantity": 3, "lineTotal": 240 }
],
"totalvalue": 1340
}
}
이 예제에서는 다음을 수행합니다.
-
$count(order.items)는 배열에 있는 항목 수를 계산합니다. -
필터
[quantity > 1]는 하나 이상의 수량을 가진 항목만 선택합니다. -
$sum(order.items.( price * 수량))은 총 값을 계산합니다.
14.6.2. 기본 제공 함수 사용 링크 복사링크가 클립보드에 복사되었습니다!
링크 복사링크가 클립보드에 복사되었습니다!
JSONata에는 문자열, 숫자, 날짜 및 배열을 조작할 수 있는 다양한 기본 제공 함수가 포함되어 있습니다. 이러한 함수는 기존 데이터에서 파생된 새 필드를 사용하여 이벤트를 보강할 수 있습니다.
기본 제공 함수를 사용하여 메타데이터 추가 예
{
"specversion": "1.0",
"id": id,
"type": "user.event",
"source": source,
"time": time,
"timestamp": $now(),
"username": $lowercase(data.user.name),
"initials": $join($map($split(data.user.name, " "), function($v) { $substring($v, 0, 1) }), ""),
"data": $
}
이 예제에서는 다음을 수행합니다.
-
$now()는 현재 타임스탬프를 추가합니다. -
$lowercase()는 사용자 이름을 소문자로 변환합니다. -
$split()는 이름을 부분으로 분할하고,$map()은 각각의 첫 글자를 추출하고,$join()는 이를 초기값으로 결합합니다.