Pipes 管道
在 placeholders 占位符 "@{ ... }" (参数注入中为 "${ ... }")中可以配置管道列表,管道提供了连续处理数据的能力,相当于由框架统一提供的全局数据加工函数。
对于不具备通用性,而是针对特定的业务的加工函数,应使用 Custom Processors 自定义加工函数。
管道的基本语法为以 | 开始,然后是 pipe identifier,最后是可选的额外参数列表,以 : 分隔,参数值如果是不包含特殊控制字符(|:})和空白符的字符串、并且不会和 JSON value 格式冲突时,可以直接填写字面量字符,否则应使用 JSON value 格式编写。
在运行时,管道列表将被遍历执行,通过 identifier 找到对应的管道函数 pipe,将当前 result 作为第一个参数,parameters 作为额外参数列表,调用 pipe 并将返回值赋值给 result。
例如以下 transform 配置片段:
transform:
url: '?query=@{ some.field[0].path = ["complex","value"] | map : instanceId | slice : 0 : 10 }'
字段 url 使用的管道为:
pipes:
- identifier: "map"
parameters:
- "instanceId"
- identifier: "slice"
parameters:
- 0
- 10
图解

管道列表
Pipes 管道源码现在托管在公开的 GitHub 仓库中,以允许包括客户在内的第三方开发者共同维护这些公共数据处理函数。
当前平台支持的管道函数列表如下:
类型转换:
| 管道名 | 说明 |
|---|---|
| boolean | 将一个值转换为布尔值(也可使用别名 `bool`)。 |
| number | 将输入值转换为数字。 |
| string | 将输入值转换为字符串。 |
逻辑运算:
| 管道名 | 说明 |
|---|---|
| equal | 比较两个值是否相同(深度比较)。 |
| not | 布尔取反。 |
| nullish | 空值合并(`??`)。 |
| ternary | 三元运算,根据条件返回两个值中的一个。 |
数学运算:
| 管道名 | 说明 |
|---|---|
| add | 数学加法或字符串拼接。 |
| divide | 数学除法。 |
| multiply | 数学乘法。 |
| round | 获取一个数值的近似值。 |
| subtract | 数学减法。 |
字符串处理:
| 管道名 | 说明 |
|---|---|
| split | 将一个字符串分割为字符串列表。 |
| substr | 根据指定起始位置和长度返回一个字符串的子串。 |
| substring | 根据指定起始位置和结束位置(不包含)返回一个字符串的子串。 |
数组或字典:
| 管道名 | 说明 |
|---|---|
| countBy | 统计一个集合中每个元素的指定属性(或迭代器执行结果)的值出现的次数。 |
| find | 从一个数据集合中找到第一个匹配的元素。 |
| findLast | 从一个数据集合中从后向前找到第一个匹配的元素。 |
| groupBy | 把一个集合按指定属性(或迭代器执行结果)的值进行分组。 |
| keyBy | 将指定属性(或迭代器执行结果)作为键名收集一个集合中的元素。 |
数组:
| 管道名 | 说明 |
|---|---|
| findIndex | 从一个数组中找到第一个匹配的元素的位置。 |
| findLastIndex | 从一个数组中从后向前找到第一个匹配的元素的位置。 |
| includes | 判断一个数组是否包含指定元素,或一个字符串是否包含指定子串。 |
| join | 将一个数组的所有元素拼接成字符串。 |
| map | 通过填充调用数组中各项的指定属性来创建一个新数组。 |
| mergeArrayByKey | 将多个对象数组根据键合并为一个数组, 对于数组类型的属性不会 deep merge, 只会 concat。 |
| reverse | 返回一个数组倒转之后的新数组。 |
| slice | 根据起始位置和结束位置(不包含)返回一个数组的一部分。 |
| sort | 返回一个数组按指定属性排序后的新数组。 |
| uniq | 获取一个数组去重后的新数组。 |
字典:
| 管道名 | 说明 |
|---|---|
| get | 获取一个对象指定属性(路径)的值。 |
序列化和反序列化:
| 管道名 | 说明 |
|---|---|
| json | 解析一个 JSON 格式的字符串(反序列化)。 |
| jsonStringify | 将一个值转换为 JSON 格式的字符串(序列化)。 |
| yaml | 解析一个 YAML 格式的字符串(反序列化)。 |
| yamlStringify | 将一个值转换为 YAML 格式的字符串(序列化)。 |
日期时间:
| 管道名 | 说明 |
|---|---|
| datetime | 日期时间格式化(使用当地时区)。 |
| deltaTime | 将一个时间段转换为人类可读的文本。 |
| parseTimeRange | 解析一个时间字符串。 |
其它:
| 管道名 | 说明 |
|---|---|
| cmdbInstanceShowName | 获得一个 CMDB 实例的展示名。 |
| graphTree | 将图遍历查询接口返回的图数据转换为树结构数据。 |
| groupByToIndex | 返回一个数组的拷贝,并为每个元素新增一个分组索引字段。 |
| mapToArray | 将一个对象根据键值对映射转换为数组。 |
| randomString | 获得一个随机字符串 |
| unitFormat | 将一个数值转换为带单位的数据。 |
变更历史
| 组件 | 版本 | 变更 |
|---|---|---|
| brick_next | 1.20.0 | 支持 slice |
| - | 1.18.3 | 支持 unitFormat |
| - | 1.16.11 | 支持 graphTree |
| - | 1.16.9 | 支持 deltaTime, nullish |
| - | 1.16.4 | 支持 sort, reverse |
| - | 1.16.3 | 支持 mapToArray, find, findLast, findIndex, findLastIndex |
| - | 1.16.2 | 支持 substr, substring |
| - | 1.16.1 | 支持 ternary, uniq |
| - | 1.15.32 | 支持 countBy;jsonStringify 和 yamlStringify 支持 indent 缩进参数 |
| - | 1.15.24 | 支持 yaml, yamlStringify |
| - | 1.15.23 | 支持 get, equal, split, join, includes, datetime, add, subtract, multiply, divide, groupBy, keyBy |
| - | 1.15.12 | 支持在占位符中使用 JSON value 类型的默认值,给管道配置参数,加入空白符 |