我有两个请求以相似的JSON结构返回响应。当我尝试在其中一个上使用JSON提取器时,它可以正常工作,但是当我尝试从第二个中以相同的方式提取值时,则不起作用。但是,让我们开始追逐吧。
我的第一个回答如下:
{
"values": [
{
"id": 1,
"name": "Fendi",
"logoId": null,
"belongsToUser": true
},
{
"id": 2,
"name": "Jean Paul Gaultier",
"logoId": null,
"belongsToUser": true
},
{
"id": 3,
"name": "Nike",
"logoId": null,
"belongsToUser": false
},
{
"id": 4,
"name": "Adidas",
"logoId": null,
"belongsToUser": true
}
]
}
然后尝试在此JSON提取器中提取“ belongsToUser”对象的ID:false:
JSON path expression: values[?(@.belongsToUser == false)].id
Match No.: 0
Default Values: null
它工作得很好。
但是,当我在第二次回复中尝试这种方式时,它不起作用。 响应如下所示:
{
"values": [
{
"id": 12,
"brandName": "Fendi",
"productCategoryName": "Shoes",
"size": "38",
"colorNames": [
"color_green"
],
"date": 1536537600000,
"imageId": null,
"title": "Money",
"numberOfOffers": 0,
"status": "ONGOING"
},
{
"id": 13,
"brandName": "Fendi",
"productCategoryName": "Shoes",
"size": "38",
"colorNames": [
"color_green"
],
"date": 1536537600000,
"imageId": null,
"title": "Exchange",
"numberOfOffers": 0,
"status": "ONGOING"
}
]
}
我尝试使用JSON提取器获取标题变量为“ Money”的对象的ID:
JSON path expression: values[?(@.title == 'Money')].id
Match No.: 0
Default Values: null
但是找不到ID值,并将我的JMeter变量设置为null。 我还尝试不使用Money或双引号,并尝试使用其他JSON路径表达式,例如
$.values[?(@.title == 'Money')].id
$..[?(@.title == 'Money')].id
$.[?(@.title == 'Money')].id
但是这些似乎都不起作用。您知道我的JSON路径表达式应该如何正常工作吗? 为什么它在第一种情况下不能在第二种情况下工作?是因为第二个响应中的对象具有内部数组吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
$..[?(@.title == 'Money')].id
表达式应该可以正常工作:
您的JMeter安装很可能已损坏,并且由于jar hell中的某些冲突库而遇到了某种形式的JMeter Classpath(这可能是由于已弃用的JSON Plugins或类似原因引起的)。因此,我建议您获取干净的latest版本的JMeter并尝试对其进行测试。如果您使用的是任何插件,请使用JMeter Plugin Manager
安装它们如果您不打算重新安装JMeter,则可以通过查看 jmeter.log 文件来尝试解决问题。如果没有可疑条目-将下一行添加到 log4j2.xml 文件:
<Logger name="org.apache.jmeter.extractor.json" level="debug" />