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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat