我使用的JMeter 2.8的正则表达式从JSON响应提取一些值。
的反应是这样的:
{
"key": "prod",
"id": "p2301d",
"objects": [{
"id": "102955",
"key": "member",
...
}],
"features":"product_features"
}
我试图让一切除了之间的文本[{....}]
用一个正则表达式。 我已经试过这一个"key":([^\[\{.*\}\],].+?)
但我一直都想与之间的其他值[{...}]
在这个例子中: 部件 )
你有什么线索?
谢谢。
假设你可以尝试使用自定义JSON utils的 JMeter的(JSON路径断言,JSON路径抽出,JSON格式化) -在这种情况下JSON路径抽出 。
- 添加ATLANTBH JMeter的组件到JMeter的: https://github.com/ATLANTBH/jmeter-components#installation-instructions 。
(从后置处理组件列表)添加JSON路径抽出的孩子返回要处理JSON响应采样:
(我用假样模仿你的回应,你将有你的原始采样)
添加尽可能多的提取是非常重视您想提取(在这种情况下3:“钥匙”,“ID”,“功能”)。
配置每个提取器:定义变量名来存储提取的值和JSONPath查询以提取相应的值:
- 对于“钥匙”:
$.key
- 对于“标识”:
$.id
- 对于“特色”:
$.features
此外,在脚本您可以参考使用JMeter的变量(变量名在JSON路径抽出设置指向“名称”字段)提取的值:如${jsonKey}
, ${jsonID}
${$.features}
。
也许这可能是不是最优化的方式,但它的工作原理。
我对我的问题的解决办法是打开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);
欲了解更多信息: http://www.havecomputerwillcode.com/blog/?p=500 。
一般的解决办法: DEMO
正则表达式: (\[{\n\s*(?:\s*"\w+"\s*:\s*[^,]+,)+\n\s*}\])
说明,你不消耗,你必须正确,每行前有空格的空间,你必须匹配之前消耗他们,这就是为什么不是你的正则表达式真正的工作。 你并不需要花葶的{
字符。