Skip to main content

响应转换插件

从v3.0_09000版本之后,新增了响应转换插件。该插件的作用在于允许用户通过JSON_Path语法从复杂的响应体中取出指定的响应内容。 用户可以在创建API时,在响应方向上添加这个插件。 插件位置

使用说明

上下文变量

  • context: 存储上下文对象
    • var: 存储上下文中可以访问的变量
      • headers: 存储所有 headers 信息
      • raw_body: 存储 body 中元数据字符串
      • body: 存储已经解析为对象的 body, 默认将 Content-Typeapplication/json 解码为该对象
    • func: 存储可使用的方法及函数(暂未支持)

可使用模板标签

  • {& jsonpath &}, 输出 jsonpath 表达式提取对象,返回对该对象进行 JSON 编码后的结果, 如果没有匹配到任何值将会返回 null 字符串

JSON Path

语法规则

JSON Path描述
$根对象或者节点
@当前元素或者节点
.子成员操作符
..递归查找子节点操作符
*无视名称匹配所有对象元素通配符
[]下标操作符
[,]按指定间隔提取元素操作符
[start\🔚step]数组切片操作符
?()通过静态求值脚本表达式筛选对象或元素
()脚本表达式通过静态求值

样例

样例数据如下:

{ 
"store" : {
"bicycle" : {
"color" : "red",
"price" : 19.95
},
"book" : [
{
"category" : "reference",
"author" : "Nigel Rees",
"title" : "Sayings of the Century",
"price" : 8.95
},
{
"category" : "fiction",
"author" : "Evelyn Waugh",
"title" : "Sword of Honour",
"price" : 12.99
},
{
"category" : "fiction",
"author" : "Herman Melville",
"title" : "Moby Dick",
"isbn" : "0-553-21311-3",
"price" : 8.99
},
{
"category" : "fiction",
"author" : "J. R. R. Tolkien",
"title" : "The Lord of the Rings",
"isbn" : "0-395-19395-8",
"price" : 22.99
}
]
}
}

表达式语法样例:

JSON PathDescription
$.store.book[*].authorstore 中所有 book 的 author
$..author所有 author
$.store.*store 中所有的对象
$.store..pricestore 中所有对象的价格
$..book[2]通过数组下标取得第三个 book
$..book[(@.length-1)]通过脚本下标取得最后一个 book
$..book[-1:]获取最后一个 book
$..book[-2:]获取最后两个 book
$..book[-2:-1]倒数第二到最后一 的 book
$..book[0,1]通过下标联合获取最前面两个 book
$..book[:2]通过数组切面下标获取最开始两个 book
$..book[?(@.isbn)]筛选所有包含 ISBN 的 book
$..book[?(@.price<10)]筛选所有 price 小于 10 的 book
$..book[?(@.price==8.95)]筛选所有 price 等于 8.95 的 book
$..book[?(@.price<30 && @.category=="fiction")]筛选所有 category 等于 fiction 并且 price 小于 30 的 book
$..*获取所有子对象的结构

转义字符

如果想避免标签进行解析,可以在标签前添加 \ 字符以避免标签被进行解析

\{& &}

样例

设定 body 内容内容如下:

{
"users" : [
{ "name" : "Jane", "age" : 29 },
{ "name" : "John", "age" : 25 }
]
}

样例 1

通过下面模板转换 body:

{& context.var.body.users[0] &}

输出:

{"name":"Jane","age":29}

样例 2

通过下面模板转换 body:

{
"name" : {& context.var.body.users[*].name &},
"age" : {& context.var.body.users[*].age &}
}

输出:

{
"name" : ["Jane","John"],
"age" : [29,25]
}

注意事项

如果模板满足如下情况会出现错误

不可使用模板标签

下列标签出现在模板定义内容中将会出现错误

- {{ expression }}
- {* expression *}
- {% expression %}
- {( expression )}
- {[ expression ]}
- {- expression -}
- {# expression #}

嵌套标签

模板不支持嵌套标签