字符串解析
对于不能直接从请求头、响应体或URL路径中通过定义参数Key获取参数值的场景,需要通过字符串解析对参数值做进一步处理,以获取用户需要的字段。字符串解析功能有以下2个入口:
在导航栏中依次点击业务感知分析>操作列表,在操作编辑或新建操作页面中,点击页面的字符串解析按钮即可进入解析页面。
在导航栏中依次点击业务感知分析>配置>系统参数配置,在参数编辑或新建批量参数页面中,点击字符串解析按钮即可进入解析页面。
自动解析
输入数据项
用户可以在左上方的输入框中输入参数样本,BPI会根据样本做自动解析。点击后清除输入框的所有内容 ,用户可重新选择或输入样本数据。用户可以通过以下2种方式获取参数样本数据:
已经定义好参数,触发了操作产生数据后,再点击编辑操作,在字符串解析页面点击可以选择样本数据进行解析。
在浏览器中按F12键,在页面中触发操作后,找到需要的请求,然后获取样本数据。
说明:样本必须是to string格式数据,即文本型和日期型的字符串必须使用引号。
解析、测试、搜索
解析:【输入数据项】下的输入框中有样本数据后,点击即可自动解析样本数据,在右侧展示解析结果。解析仅在新建解析树时才可使用,如果一个参数已经有保存过的解析树,再解析时按钮变为状态。
每个节点显示的内容包括:处理方式。如果是Json显示key,如果是List显示index,非键值对结构不显示该项。如果绑定参数,显示参数名称=返回值,如果没有参数不显示该项。
测试:如果参数解析成功,用户点击保存后会退出字符串处理页面,当再次进入字符串处理页面时,可在【输入数据项】的输入框中输入样本,点击可以检查配置是否正确,主要解决以下问题:
- 定义好解析树参数后,获取参数不正确,进入字符串解析页面测试参数配置是否正确。
- 定义好解析树参数后,但是不确定原样本是否有缺失,保存解析树后,重新输入样本测试参数配置是否正确。举例来说,丢失"msg":"success"这个键值对后,在【测试】时,原来的msg节点标红提示用户样本数据缺失。如果没有将msg定义为参数,缺失节点显示为灰色。
搜索:在右上角输入框输入Json的key,点击后查询节点并标黄。
解析树添加节点
用户可以在自动解析的解析树上增加处理节点,并选择将处理结果绑定为参数或不绑定参数。点击鼠标右键,弹出菜单选项,点击新增叶子节点,点击编辑当前节点,点击删除当前节点。
BPI目前支持截取、替换、拼接、键值对、高级设置、不操作6种处理方式,以下对6种字符串处理方式进行详细说明。
截取
选取一段字符串的某一部分,通过定位字符确定需要字符串的位置,输出截取的字符串。如zhangsan取zha,填写规则如下。
- 第几个:仅支持大于等于0的正整数,从1开始计数,0特指最后一个字符。
- 定位字符:支持任意字符串,包括英文字母、单词、单个中文字、词语、数字、{、[、(、引号、空格、冒号、句号等,以及以上字符串的组合,最多可输入500个字符。
- 前/后几:支持大于等于0的正整数。
- 包含开始:勾选后,包含开始字符,如样本为zhangsan,第1个a字符前0包含开始,则输出的首字符为a,不包含开始则输出首字符为n。前0(包含)、后0(包含)、前1(不包含)、后1(不包含)都是指定位字符本身 。包含结束同理。
说明:如果设置的条件找不到满足要求的字符,返回null,如样本为My name is lisi,找不到第2个a字符,返回null。
举例1: 截取开头,如zhangsan取zha配置如下:
举例2: 截取结尾,zhangsan取san配置如下:
举例3: 截取中间,zhangsan取ang配置如下:
替换
将查找字符替换成指定字符,例如将zhangsan替换为张三。
说明:如果找不到查找内容,返回原字符串。
拼接
给原字符串拼接指定字符,如将001拼接为ID001,填写规则如下:
- 添加字符:支持任意字符串,包括英文字母、单词、单个中文字、词语、数字、{、[、(、引号、空格、冒号、句号等,以及以上字符串的组合,最多可输入500个字符。
- 添加位置:选择【左拼接】后将添加字符拼接在左侧,选择【右拼接】后将添加字符拼接在右侧,选择【下标】后用户可指定插入位置索引,可填入-999~999的任意整数(不可输入0),其中-1表示拼接在最后一个字符前面,返回"0ID1" 。
说明: 若下标超出字符串长度,返回null。
键值对
适用于从JSON/List/Map/元组等标准数据格式中取参数,用户可以先自动解析标准字符串,如果有key-value丢失可以添加键值对处理节点添加参数,填写规则如下:
{"name":"zhangsan","httpcode":200,"busi_code":["666","000","333"]}
- 取key:即根据value取key,在value处填入要获取的返回值字符串,如将zhangsan对应的key定义为参数,如果是list则不处理。
取value:即根据key取value,在key处填入要获取的字符串,如将name对应的value定义为参数,获取zhangsan。
对APM操作的数据项解析时,选择【键值对】取value或者index,点击添加参数,可选择将List数据拆分成多条记录,即将操作记录由一条拆分成多条,操作追踪列表中一条记录将变成多条。如配置参数name 返回 [zhangsan,lisi,wangwu],拆分后操作记录将变成以下结构:
2021-04-30 13:36:21 操作A name = zhangsan,No=1 2021-04-30 13:36:21 操作A name = lisi,No=1 2021-04-30 13:36:21 操作A name = wangwu,No=1
取index:即根据index取value,获取列表的第1个值666,index可填入-999~999的任意整数,不可填入0,下图例子填入-3和1的结果是一样的。
高级配置
使用高级函数处理字符串。如果以上4种方法不能处理时,进入高级设置,用户可通过简单的代码配置字符串处理,包括条件判断,逻辑运算等。目前支持以下函数:
AND:对2个表达式做逻辑与判断。
OR:对2个表达式做逻辑或判断。
IF ELSE IF:对有多种返回值的参数先做条件判断再返回,如将HTTP Code为200定义为成功,500为失败。
SPLIT:返回分隔符分割后的子串,语法为 split([expr], str, index),[expr]为需要处理的字符串。str为分割的字符,支持字母/标点符号/空格/换行(\n)/制表符(\t) 等。index为分割后取的字符索引,从1开始,可为负数。
说明:其中[expr]可用解析树的步骤代替,格式为[步骤编号],如[1-1]。
SUBSTRING:截取指定位置和长度的字符串,语法为substring([expr], index, len),[expr]为需要处理的字符串。index为定位字符索引,从1开始,可为负数,可不填。len为截取步长,正负数都可,正数代表从左往右取值,负数代表从右往左取值。如截取zhangsan的zhang定义为姓氏。
说明:
- index不填写代表从步长位置截取至字符串结束,如substring('abcdef',2) = bcdef,substring('abcdef',-2) = ef。
- 若index或len超出字符串长度,返回null。
- 其中[expr]可用解析树的步骤代替,格式为[步骤编号],如[1-1]。
LEFT:截取左边的字符,语法为left([expr],len),[expr]为需要处理的字符串。len为截取步长,正负数都可,正数代表从左往右取值,负数代表从右往左取值。如截取zhangsan的zhang定义为姓氏。
说明:
- 其中[expr]可用解析树的步骤代替,格式为[步骤编号],如[1-1]。
- 若len超出字符串长度,返回null。
RIGHT:截取右边的字符,语法为right([expr],len),[expr]为需要处理的字符串。len为截取步长,正负数都可,正数代表从右往左取值,负数代表从左往右取值。如截取zhangsan的san定义为名字。
说明:
- 其中[expr]可用解析树的步骤代替,格式为[步骤编号],如[1-1]。
- 若len超出字符串长度,返回null。
DATEDIFF:计算2个日期的间隔,语法为datediff(starttime, endtime, datepart)。starttime为要时间差的起始时间,格式为"yyyy-mm-dd"。endtime为时间差的终止日期,格式为"yyyy-mm-dd",不填代表当天的日期。 datepart为返回时间差的格式,'y'返回年差值,'m'返回月差值,'d'返回日差值。如已知用户的出生日期,要计算用户的年龄。
说明:
- 其中starttime和endtime可用解析树的步骤代替,格式为[步骤编号],如[1-1]。
- 若starttime的日期比endtime的日期要靠后,返回负数,如datediff("2020-6-2", "2020-6-1", 'd') = -1。
不处理
不对字符串做任何操作,用于对一个预处理生成多个参数情况。如针对订单编号ID2300506不操作生成第一个参数,再截取23,替换为“交易成功”生成第二个参数。
说明:根节点默认为不处理。
用户选择上述方法配置节点后,点击即可保存节点处理,点击取消编辑内容,点击将处理结果添加为参数。
说明:用户删除节点会将其子节点同时删除,用户无法删除已被引用的参数。
保存和修改
修改:用户点击右上角的按钮可撤回修改回到上一步,最多可撤回5步。点击可恢复下一步,与撤销相对。仅限在点击保存前的状态撤回和恢复。
保存:用户解析并配置完成所有处理节点后,点击后保存解析树结构和所有参数,点击不保存当前页面的修改。
手动解析
如果用户在配置解析树前无法获取样本或者样本是不标准的字符串结构,则无法使用自动解析功能,用户需添加处理节点。如数据项为"name":"zhangsan",是一个不标准的字符串,点击无法获取参数,用户可手动添加截取节点获取姓氏zhang。