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 になります。それ以外の場合は、update. order に設定され ます。
  • ペイロードの合計フィールドが 1000 より大きい場合は、priority 属性が値が 高い 状態で追加されます。それ以外の場合は normal に設定されます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat