4 JOSN提取器和JSON JMSPath提取器比较 为了更好让大家理解JOSN提取器和JSON JMSPath提取器,我们在网上建立一个JSON文件food.json。内容如下。
{
"store": {
"food": [
{
"category": "零食",
"name": "黄飞鸿花生",
"desc": "黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米",
"price":28.8
},
{
"category": "零食",
"name": "良品铺子",
"desc": "良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃",
"date":"2022-2-4",
"price":108.00
},
{
"category": "零食",
"name": "三只松鼠每日坚果",
"desc": "三只松鼠每日坚果 750g/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果",
"price":149.00
},
{
"category": "零食",
"name": "百草味",
"desc": "百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g/箱",
"price":34.9
},
],
"book": {
"name": "全栈软件测试工程师宝典",
"author": "顾翔",
"price": 168.00
}
},
"expensive": 70
}
1)把放到Tomcat服务器中 2)建立一个HTTP请求,如图29所示(本节的内容见本书配套代码json.jmx)。
图29 food.json TTP请求
3)建立JSON提取器,如图30所示。
图30 food.json JSON提取器
4)然后得到如下结果。
var10_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}
var10_matchNr=1
var11_1={"name":"黄飞鸿花生","category":"零食","price":28.8,"desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米"}
var11_2={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}
var11_matchNr=2
var12_1={"name":"黄飞鸿花生","category":"零食","price":28.8,"desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米"}
var12_2={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}
var12_matchNr=2
var1_1=黄飞鸿花生
var1_2=良品铺子
var1_3=三只松鼠每日坚果
var1_4=百草味
var1_matchNr=4
var2_1=黄飞鸿花生
var2_2=良品铺子
var2_3=三只松鼠每日坚果
var2_4=百草味
var2_5=全栈软件测试工程师宝典
var2_matchNr=5
var3_1=[{"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8},{"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0},{"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0},{"category":"零食","name":"百草味","desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱","price":34.9}]
var3_2={"name":"全栈软件测试工程师宝典","author":"顾翔","price":168.0}
var3_matchNr=2
var4_1=28.8
var4_2=108.0
var4_3=149.0
var4_4=34.9
var4_5=168.0
var4_matchNr=5
var5_1={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}
var5_matchNr=1
var6_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}
var6_matchNr=1
var7_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}
var7_2={"name":"三只松鼠每日坚果","category":"零食","price":149.0,"desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果"}
var7_matchNr=2
var8_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}
var8_2={"name":"三只松鼠每日坚果","category":"零食","price":149.0,"desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果"}
var8_matchNr=2
var9_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}
var9_2={"name":"三只松鼠每日坚果","category":"零食","price":149.0,"desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果"}
var9_3={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}
var9_matchNr=3
5)建立如表3对应表格。 表3 food.json JSON提取器获取数据
JSON Path | 值 | 含义 |
---|---|---|
$.store.food[*].name | var1_1=黄飞鸿花生var1_2=良品铺子var1_3=三只松鼠每日坚果var1_4=百草味var1_matchNr=4 | 所有food的name值 |
$..name | var2_1=黄飞鸿花生var2_2=良品铺子var2_3=三只松鼠每日坚果var2_4=百草味var2_5=全栈软件测试工程师宝典var2_matchNr=5 | 所有的name值 |
$.store.* | var3_1=[{"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8},{"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0},{"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0},{"category":"零食","name":"百草味","desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱","price":34.9}]var3_2={"name":"全栈软件测试工程师宝典","author":"顾翔","price":168.0}var3_matchNr=2 | store内所有的数据 |
$.store..price | var4_1=28.8var4_2=108.0var4_3=149.0var4_4=34.9var4_5=168.0var4_matchNr=5 | 所有的价格 |
$..food[3] | var5_1={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}var5_matchNr=1 | 标号为3的food数据(第一个标号为) |
$..food[-3] | var6_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}var6_matchNr=1 | 倒数第3个food数据 |
$..food[1,2] | var7_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}var7_2={"name":"三只松鼠每日坚果","category":"零食","price":149.0,"desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果"}var7_matchNr=2 | 标号为1到2的food数据 |
$..food[1:3] | var8_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}var8_2={"name":"三只松鼠每日坚果","category":"零食","price":149.0,"desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果"}var8_matchNr=2 | 标号为1和2的food数据(不含3) |
$..food[-3:] | var9_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}var9_2={"name":"三只松鼠每日坚果","category":"零食","price":149.0,"desc":"三只松鼠每日坚果 750g\/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果"}var9_3={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}var9_matchNr=3 | 倒数3个food数据 |
$..food[?(@.date)] | var10_1={"name":"良品铺子","date":"2022-2-4","category":"零食","price":108.0,"desc":"良品铺子 经典坚果礼盒8袋装\/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃"}var10_matchNr=1 | 含有date属性的food数据 |
$..food[?(@.price<100)] | var11_1={"name":"黄飞鸿花生","category":"零食","price":28.8,"desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米"}var11_2={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}var11_matchNr=2 | 价格小于100的food数据 |
$..food[?(@.price<=$['expensive'])] | var12_1={"name":"黄飞鸿花生","category":"零食","price":28.8,"desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米"}var12_2={"name":"百草味","category":"零食","price":34.9,"desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g\/箱"}var12_matchNr=2 | 价格小于expensive 的food数据 |
6)建立JSON JMSPath提取器,如图31所示。
图31 JSON JMSPath提取器
由于JSON JMSPath提取器一次只能输入一个JSON JMSPath表达式,所以我们只能一建立多个提取器。在树状图“JSON JMESPath Extractor1”右击鼠标,在弹出菜单中选择“复写”,使用相同的方法建立12个JSON JMSPath提取器;名称分别为:JSON JMESPath Extractor2、JSON JMESPath Extractor3hellip;JSON JMESPath Extractor12。变量分别为:v1、v2hellip;v12;表达式分别为:store.food[].name、store.、store.[book.price,food[].price]、store.food [2]、store.food [-2]、store.food [:2]、store.food [1:2]、store.food [-2:]、store.food [?(@.date)]、length(store.food [*])、max_by(store.food, &price).name和min_by(store.food, &price)。 7)运行得到如下结果。
v10_1=4
v10_matchNr=1
v11_1=三只松鼠每日坚果
v11_matchNr=1
v12_1={"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8}
v12_matchNr=1
v1_1=黄飞鸿花生
v1_2=良品铺子
v1_3=三只松鼠每日坚果
v1_4=百草味
v1_matchNr=4
v2_1=[{"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8},{"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0},{"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0},{"category":"零食","name":"百草味","desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g/箱","price":34.9}]
v2_2={"name":"全栈软件测试工程师宝典","author":"顾翔","price":168.0}
v2_matchNr=2
v3_1=168.0
v3_2=[28.8,108.0,149.0,34.9]
v3_matchNr=2
v4_1={"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋
中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0}
v4_matchNr=1
v5_1={"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋
中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0}
v5_matchNr=1
v6_1={"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8}
v6_2={"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0}
v6_matchNr=2
v7_1={"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0}
v7_matchNr=1
v8_1={"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋
中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0}
v8_2={"category":"零食","name":"百草味","desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g/箱","price":34.9}
v8_matchNr=2
v9_1={"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0}
v9_matchNr=1
8)同样将结果汇集以下。如表4所示。 表4 food.json JSON JMSPath提取器获取数据
JSON JMSPath | 值 | 含义 |
---|---|---|
store.food[*].name | var_1=黄飞鸿花生var_2=良品铺子var_3=三只松鼠每日坚果var_4=百草味var_matchNr=4 | 所有food的名称 |
store.* | var_1=[{"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8},{"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0},{"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0},{"category":"零食","name":"百草味","desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g/箱","price":34.9}]var_2={"name":"全栈软件测试工程师宝典","author":"顾翔","price":168.0}var_matchNr=2 | store包含的所有分类数据 |
store.[book.price,food[*].price] | var_1=168.0var_2=[28.8,108.0,149.0,34.9]var_matchNr=2 | 所有商品的价格 |
store.food [2] | var_1={"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0}var_matchNr=1 | 标号为2的food数据(从0开始) |
store.food [-2] | var_1={"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0}var_matchNr=1 | 倒数第2个food数据 |
store.food [:2] | var_1={"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8}var_2={"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0}var_matchNr=2 | 前2个food的数据 |
store.food [1:2] | var_1={"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0}var_matchNr=1 | 索引1(包括)到索引2(不包括)的food的数据 |
store.food [-2:] | var_1={"category":"零食","name":"三只松鼠每日坚果","desc":"三只松鼠每日坚果 750g/30袋 中秋送礼坚果礼盒零食大礼包儿童孕妇节日混合干果腰果夏威夷果核桃仁开心果","price":149.0}var_2={"category":"零食","name":"百草味","desc":"百草味 休闲零食小吃整箱蛋糕办公室早餐手撕面包点心传统糕点 原味肉松饼1000g/箱","price":34.9}var_matchNr=2 | 最后2个food的数据 |
store.food [?(@.date)] | var_1={"category":"零食","name":"良品铺子","desc":"良品铺子 经典坚果礼盒8袋装/1310g食食有爱 每日坚果干果休闲零食坚果炒货零食大礼包节日送礼夏威夷果核桃","date":"2022-2-4","price":108.0}var_matchNr=1 | 包含date属性的数据 |
length(store.food [*]) | var_1=4var_matchNr=1 | 所有food种类的数量 |
max_by(store.food, &price).name | var_1=三只松鼠每日坚果var_matchNr=1 | 价格最高的food名称 |
min_by(store.food, &price) | var_1={"category":"零食","name":"黄飞鸿花生","desc":"黄飞红 麻辣花生210g*2袋 每日坚果炒货休闲网红囤货零食小吃下酒菜花生米","price":28.8}var_matchNr=1 | 价格最低的food信息 |
最后我们对比一下JSON JMESPath Extractor与JOSN提取器。