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))
  }
}
Copy to Clipboard Toggle word wrap

これを入力とします。

{
  "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 }
    ]
  }
}
Copy to Clipboard Toggle word wrap

変換により次の出力が生成されます。

{
  "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
  }
}
Copy to Clipboard Toggle word wrap

この例では、以下が適用されます。

  • $count(order.items) は、配列内のアイテム数をカウントします。
  • [quantity > 1] フィルターは、数量が 1 より大きいアイテムのみを選択します。
  • $sum(order.items.(price * quantity)) は合計値を計算します。

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": $
}
Copy to Clipboard Toggle word wrap

この例では、以下が適用されます。

  • $now() は現在のタイムスタンプを追加します。
  • $lowercase() はユーザー名を小文字に変換します。
  • $split() は名前を部分に分割し、$map() はそれぞれの最初の文字を抽出し、$join() はそれらを頭文字に結合します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2026 Red Hat