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 () はそれらを initials に結合します。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat