跳到主要内容

操作数据(Manipulating data)

你可以使用 Flows 查询语言 (FQL) 执行数学函数、操作字符串和数组,并以多种方式与响应中的数据交互。示例数据和 FQL 示例如下。

示例 JSON

下面的示例使用此 JSON 数据:

    {
"customer_info": {
"customer field": "Customer data",
"unformatted_customer_field": " customer \n stuff ",
"total_value": "281.01",
"associated_usernames": ["user1", "myuser", "online_user"]
},
"payments": [
{
"invoice_number": "101301",
"date": "2022-09-11T16:12:34.494Z",
"description": "recurring subscription",
"amount": 110.48
},
{
"invoice_number": "101302",
"date": "2022-09-29T14:45:13.148Z",
"description": "one time purchase",
"amount": 24.49
},
{
"invoice_number": "101303",
"date": "2022-10-11T16:12:34.683Z",
"description": "recurring subscription",
"amount": 110.48
},
{
"invoice_number": "101304",
"date": "2022-10-12T11:45:22.182Z",
"description": "recurring subscription deluxe",
"amount": 35.56
}
]
}

插入字符串,然后按描述对结果进行分组和求和

下面的示例获取数组description中的每个值payments并附加字符串annual cost。然后获取amount每个description字段下方的值,将其乘以 12,并将其附加到相应的结果中。结果按description字段分组。

普通话kk
结果
[ {“定期订阅年度费用”:1325.76}, {“一次性购买年度成本”:293.88}, {“定期订阅年度费用”:1325.76}, {“定期订阅豪华年度费用”:426.72} ]

返回字符串的长度

$length()函数返回指定字符串的长度。description下面的示例返回数组中第一个键值对中字符串的长度payments

普通话$length(付款[0].描述)
结果22

返回字符串的一部分

$substring()函数返回指定字符串的一部分。在下面的示例中,The3是可选的并指定偏移量,而 the6是你选择的字符数。负数也可以用于偏移量。

普通话$substring(payments[0].description, 3, 6)
结果“急”

获取第一次出现模式之前的字符串

在下面的示例中,$substringBefore()函数返回指定出现的 之前的子字符串subscription。如果找不到subscription,则返回整个字符串。

普通话$substringBefore(payments[0].description, "subscription")
结果“再次发生的 ”

在第一次出现模式后获取字符串

$substringAfter()函数找到一个模式并返回紧跟在该模式之后的子字符串。下面的示例返回数组第一个对象中键值对后面的recurringdescription字符串payments

普通话$substringAfter(payments[0].description, "recurring")
结果“订阅”

将字符串全部转为大写

$uppercase()函数将字符串中的所有字符变为大写。

普通话$大写(支付[0].描述)
结果“定期订阅”

将字符串全部转为小写

$lowercase()函数将字符串中的所有字符变为小写。

普通话$lowercase(customer_info."客户字段")
结果“客户资料”

修剪字符串

$trim()函数去除多余的前导和尾随空格,将换行符、回车符、换行符和制表符转换为单个空格字符,并将连续的空格缩减为单个空格字符。

FQL$trim(customer_info.unformatted_customer_field)
Result"customer stuff"

填充字符串

$pad()函数向字符串中添加空格或字符,使字符串的总长度等于第二个参数。如果第二个参数是正数,则用第三个参数填充字符串的末尾。如果第二个参数为负,则用第三个参数填充字符串的前面。(如果留空,第三个参数字符默认为空格。)

FQL$pad(customer_info."customer field", 15, "#")
Result"Customer data##"

将字符串拆分为组件数组

$split()函数返回在第二个参数中指定的分隔符上拆分的字符串,并可选地受第三个参数限制。你还可以使用正则表达式而不是字符串。

FQL$split(payments[1].description, " ", 2)
Result["one","time"]

将字符串数组连接成一个字符串

$join()函数从字符串数组创建单个字符串。下面的示例从键获取数组associated_usernames并将数组的值作为单个字符串返回。

FQL$join(customer_info.associated_usernames)
Result"user1myuseronline_user"

用另一个字符串替换一个字符串

在下面的示例中,该$replace()函数在第一个参数字符串中查找实例recurring并将它们替换为renewing,仅限于找到的第一个实例(可选地用 指定1)。你也可以使用正则表达式而不是recurring.

FQL$replace(payments[0].description,"recurring", "renewing", 1)
Result"renewing subscription"

Base64 编码一个字符串

$base64encode()函数将字符串转换为 base64 编码。下面的示例将字符串转换"some data here""c29tZSBkYXRhIGhlcmU=".

FQL$base64decode("c29tZSBkYXRhIGhlcmU=")
Result"some data here"

Base64 解码字符串

$base64decode函数将 base64 编码的字符串转换为人类可读的字符串。下面的示例转换"c29tZSBkYXRhIGhlcmU=""some data here".

普通话$base64decode("c29tZSBkYXRhIGhlcmU=")
结果“这里有一些数据”

将字符串转换为 JSON

$jsonParse()函数可以将字符串格式化为 JSON,以便可以使用 FQL 对其进行查询。下面的示例假设你将字符串{"Feedback Type":"Bug Report"}存储为名为 的变量input

普通话$jsonParse(输入)
结果{“反馈类型”:“错误报告”}

将字符串转换为数字

你可以使用该函数将字符串转换为数字$number()。下面的示例将对象"281.01"中的字符串转换customer_info为数字281.01

普通话$number(customer_info.total_value)
结果281.01

求和数值

$sum()函数从对象或数组中键值对的每个实例获取值,将这些值相加,然后返回结果。下面的示例获取数组amount中每个字段的值payments并返回它们的总和。

普通话$总和(付款金额)
结果“281.01 美元”

获取两个数字之间的绝对差

$abs()函数返回两个数字之间的绝对差值。绝对差是数轴上两个值之间的距离。绝对差总是正的。

普通话$绝对值(4.56 - 6.78)
结果2.22

取整一个数字

$ceil()函数将数字四舍五入为下一个整数。

向下舍入一个数字

floor()函数将数字向下舍入到前一个整数。

提高一个数的幂

$power()函数将第一个数字乘以第二个数字的幂。下面的示例将 2(底数)提高到 3(指数)的次方。

获取数字的平方根

$sqrt()函数返回数字的平方根。

将数字转换为十六进制或二进制

formatBase()函数将数字转换为十六进制或二进制。下面的示例转换3000为十六进制。使用基数 2 而不是 16 将转换3000为二进制。

普通话$formatBase(3000, 16)
结果“bb8”

生成一个新的随机发票号

$round($random())函数生成一个随机整数。下面的示例生成一个 1 到 1000 之间的随机整数,并返回附加到字符串“Invoice number”的数字。

普通话"发票号" & $round($random()*1000)
结果“发票编号 891”

将数字转换为字符串

你可以使用该函数将数字转换为字符串$string()。下面的示例从数组amount中第一个对象的键中获取数字值payments并将其转换为字符串"110.48"

普通话$字符串(付款[0].金额)
结果“110.48”

编码 URL 组件

$encodeUrlComponent()函数将 URL 组件中的某些字符替换为其 UTF-8 编码版本。下面的示例替换?%3F,=%3D

普通话$encodeUrlComponent("?city=墨尔本")
结果“%3Fcity%3D墨尔本”

解码 URL 组件

$decodeUrlComponent()函数将 URL 组件中的 UTF-8 编码字符替换为其原始版本。下面的示例替换%3F?,$3D=

普通话$decodeUrlComponent("%3Fcity%3D墨尔本")
结果“?城市=墨尔本”

编码整个 URL

$encodeUrl()函数将 URL 中的某些字符替换为 UTF-8 编码字符。下面的示例替换こんにちは%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF

普通话$encodeUrl("https://faketranslatewebsite.com/?phrase=こんニちは")
结果“https://faketranslatewebsite.com/?phrase=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF”

解码整个 URL

$decodeUrl()函数将 URL 中的 UTF-8 编码字符替换为其原始版本。下面的示例替换%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AFこんにちは.

普通话$decodeUrl("https://faketranslatewebsite.com/?phrase=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF")
结果“https://faketranslatewebsite.com/?phrase=こんニちは”

获取 ISO 8601 格式的当前时间

$now()函数以 ISO 8601 格式返回当前时间。

普通话$现在()
结果“2022-11-04T22:36:57.094Z”

获取自纪元以来的当前时间(以 Unix 毫秒为单位)

millis()函数返回自纪元以来的当前时间(以 Unix 毫秒为单位)。

普通话$毫秒()
结果1667601477254

从特定日期格式转换为 Unix 纪元时间

$toMillis()函数将给定的日期格式转换为 Unix 纪元时间。有关日期格式的详细信息,请参阅下面的格式部分。

普通话$toMillis("10/12/2018 11:39 PM", "[M]/[D]/[Y] [h]:[m] [P]")
结果1539387540000

从 Unix 纪元时间转换为特定的日期格式

$fromMillis()函数将 Unix 纪元时间转换为不同的日期格式。有关日期格式的详细信息,请参阅下面的格式部分。

普通话$fromMillis(1539387540000, "[Y]-[M]-[D] [H]:[m]:[s] [z]")
结果“2018-10-12 23:39:00 GMT+00:00”

从日期中获取日/月/年

、和函数从年-月-日日期格式返回它们各自的组成部分$year()$month()``$day()

普通话$year("2023-02-11") & "-" & $month("2023-02-11") & "-" & $day("2023-02-11")
结果“2023-2-11”

从日期中获取时间

$hours()$minutes()$seconds()和函数$milliseconds()从给定日期返回它们各自的值。下面的示例使用$now()日期函数。

普通话$hours($now()) & ":" & $minutes($now()) & ":" & $seconds($now()) & ":" & $milliSeconds($now())
结果“19:23:8:143”

从日期中获取星期几

$dayOfTheWeek()函数接受日期并返回对应于星期几的数字。0是星期天,1是星期一,依此类推。

普通话$dayOfTheWeek($现在())
结果2个

比较两个日期

$hasSameDate()函数接受两个或多个日期,参数指定日期中的值。该函数比较参数指定的值,true如果相同则返回,否则false返回。

普通话$hasSameDate("2023-02-01", "2023-02-08", ["月", "年"])
结果真的

将日期增加一天

$datePlus()函数接受一个日期(格式为YYYY-MM-DD或自纪元以来的毫秒数)、你要添加的单位数以及你要提前的日期组件(yearsmonthsdayshoursminutessecondsmilliseconds)。该函数以自纪元以来的毫秒数返回增加的日期。

普通话$datePlus("2023-02-07", 1, "天数")
结果1675814400000

获取两个日期之间的差异

$diffDate()函数接受两个日期(格式为YYYY-MM-DD或自纪元以来的毫秒数)和每个日期的一个组成部分(years, months, days, hours, minutes,secondsmilliseconds),然后返回两个日期组成部分之间的差异。

普通话$diffDate("2023-02-08", "2023-01-22", "天数")
结果17

时间和日期格式

特点意义
月份作为数值
一个月中的某一天
d一年中的某一天
F星期几
W一年中的一周
w一个月中的一周
H小时(24 小时)
H小时(12 小时)
P上午/下午标记
分钟
第二
F小数秒
Z时区
z时区但修改了使用 GMT 包含前缀作为时间偏移的位置
C日历:日历名称的名称或缩写
纪元:年数基准的名称,例如君主的统治时期

附加到数组

$append()函数可以将两个数组、一个数组和一个值或两个字符串组合成一个数组。

普通话$append([1,2,3], [4,5,6])
结果[1,2,3,4,5,6]

如果-那么-其他

$boolean值是真/假测试。第二个值是 true 的输出,最后一个值是 false 的输出。下面的示例测试该total_value字段的值是否大于 250。由于该值大于 250,该函数返回“high-value customer”。

普通话$boolean(customer_info.total_value > 250) ? “高价值客户”:“不是高价值客户”
结果“高价值客户”

分区数组

$partition()函数将数组分解为更小的数组,并将更小的数组作为列表返回。

普通话$分区(付款,2)
结果
[[{"invoice_number": "101301","date": "2022-09-11T16:12:34.494Z","description": "定期订阅","amount": 110.48},{"invoice_number": "101302 ","date": "2022-09-29T14:45:13.148Z","description": "一次性购买","amount": 24.49}],[{"invoice_number": "101303","date": "2022-10-11T16:12:34.683Z","description": "定期订阅","amount": 110.48},{"invoice_number": "101304 ","date": "2022-10-12T11:45:22.182Z","description": "定期订阅豪华版","amount": 35.56}]]

对数组中的每个值执行操作

在此示例中,该函数从数组中的字段$map()中获取数值,并使用该函数将它们转换为字符串。amount``payments``$string()

普通话$地图(输入.付款[].金额,$字符串)
结果$地图(输入.付款[].金额,$字符串)

筛选值

在此示例中,函数从数组中的字段$filter()返回大于 40 的值。amount``payments

普通话$filter(input.payments[].amount,fn($v,$i,$a) { $v > 40})
结果[110.48, 110.48]

将数组折叠为单个值

reduce()函数将函数应用于数组中的每个元素。在此示例中,它将数组的所有元素相加。

普通话$reduce(input.payments[].amount,fn($i, $j){$i + $j})
结果281.01

排序数组

$sort()函数通过指定的函数对数组进行排序,其中$j当前项是当前项,$i下一项是。

普通话$sort(input.payments[].amount,fn($i, $j){$i < $j})
结果[110.48, 110.48, 35.56, 24.49]

对对象中的每个值执行操作

在此示例中,$each()函数将对象中的每个字符串值转换为大写。

普通话$each({"transaction_id": "inv_80394", "description": "购买20个数据"},$uppercase)
结果["INV_80394", "购买 20 个数据单元"]