我正在使用Jmeter 2.8中的正则表达式从JSON响应中提取一些值。
响应是这样的:
{
"key": "prod",
"id": "p2301d",
"objects": [{
"id": "102955",
"key": "member",
...
}],
"features":"product_features"
}
我试图获得除[{....}]
之间的文本以及一个正则表达式之外的所有内容。
我已尝试过这个"key":([^\[\{.*\}\],].+?)
,但我总是在[{...}]
之间获取其他值(在此示例中为成员)
你有什么线索吗? 谢谢。
答案 0 :(得分:2)
假设您可以尝试在jmeter中使用自定义JSON utils(JSON Path Assertion,JSON Path Extractor,JSON Formatter) - 在这种情况下使用 JSON Path Extractor 。
将JSON Path Extractor(来自Post Processors组件列表)作为子项添加到采样器,该采样器返回您要处理的json响应:
(我使用Dummy Sampler来模拟你的回复,你将拥有原始的采样器)
添加与您想要提取的值一样多的提取器(在本例中为3:“key”,“id”,“features”)。
配置每个提取器:定义变量名称以存储提取的值,并JSONPath query提取相应的值:
$.key
$.id
$.features
此外,在脚本中,您可以使用jmeter变量(在“名称”字段中的JSON路径提取器设置中指向的变量名称)引用提取的值: ${jsonKey}
,${jsonID}
,${$.features}
。
也许它可能不是最佳方式,但它有效。
答案 1 :(得分:2)
我对我的问题的解决方案是将JSON变成一个对象,这样我就可以只提取我想要的值,而不是{...}
中的值。
在这里你可以看到我的代码:
var JSON={"itemType":"prod","id":"p2301d","version":"10","tags":[{"itemType":"member","id":"p2301e"},{"itemType":"other","id":"prod10450"}],"multiPrice":null,"prices":null};
//Transformation into an object:
obj = eval(JSON );
//write in the Jmeter variable "itemtype", the content of obj.itemType:prod
vars.put("itemtype", obj.itemType);
答案 2 :(得分:1)
一般解决方案:DEMO
正则表达式:(\[{\n\s*(?:\s*"\w+"\s*:\s*[^,]+,)+\n\s*}\])
解释,你没有消耗你必须正确的空格,在每一行都有空格之前你必须在匹配之前使用它们,这就是为什么你的正则表达式不能真正起作用的原因。您不需要浏览{
字符。