阿里云API网关-后端过滤器-汇总查询结果
python
阿里云Dataworks数据服务使用API网关提供服务,因Api不支持汇总查询,故使用后端过滤器。
又因结果超过15000字符串结果无法转为json,所以要分开处理。
字符串提取带小数金额使用re.findall正则表达式
正则表达式含义
. # 点可代表一切字符
\ # 起转义作用
[...] # 指代方括号中的任意字符
\d # 指代数字0-9
\D # 指代非数字
\s # 指代一切空格,包括tab制表符、空格、换行等
\S # 指代非空格
\w # 指代大小写字母、数字和下划线
\W # 指代非大小写字母、数字和下划线
* # 匹配前面字符 >=0 次
+ # 匹配前面字符1次及以上
? # 匹配前面字符0次或1次
{m} # 匹配m次
{m,n} # 匹配m到n次
{m,} # 至少匹配m次
# -*- coding: utf-8 -*- # event (str) : in filter it is the API result, in other cases, it is your param # context : some environment information, temporarily useless # import module limit: json,time,random,pickle,re,math # do not modify function name import json import re def handler(event,context): # load str to json object json_len = len(event) json_type = str(type(event)) json_type1 = 0 list_a = [] a_dict = {} if json_len < 15000: obj = json.loads(event) data = obj['data'] data_len = len(data) list_data = [] amt_result = 0.0 for i in range(data_len): list_data.append(data[i]['trans_amt']) for j in range(data_len): amt_result += list_data[j] amt_result = round(amt_result, 2) sales_name = '' mer_name = '' if data_len >= 1: sales_name = data[0]['sales_name'] mer_name = data[0]['mer_name'] else: sales_name = '' mer_name = '' result = {"sales_name": sales_name,"mer_name": mer_name, "trans_amt": amt_result} else: amt_result = 0.0 list_data = [float(s) for s in re.findall(r'\d+\.*\d*', event)] data_len = len(list_data) for j in range(data_len): amt_result += list_data[j] amt_result = round(amt_result, 2) result = {"sales_name": sales_name,"mer_name": mer_name, "trans_amt": amt_result} return result # obj = obj[0]['trans_amt'] # add your code here # end add # return obj,a

浙公网安备 33010602011771号