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

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat