如何提取JSON响应2个字符之间的一切吗?(How to extract everything be

2019-10-17 14:05发布

我使用的JMeter 2.8的正则表达式从JSON响应提取一些值。

的反应是这样的:

{
    "key": "prod",
    "id": "p2301d",
    "objects": [{
            "id": "102955",
            "key": "member",
            ...
         }], 
    "features":"product_features"
}

我试图让一切除了之间的文本[{....}]用一个正则表达式。 我已经试过这一个"key":([^\[\{.*\}\],].+?)但我一直都想与之间的其他值[{...}]在这个例子中: 部件

你有什么线索?
谢谢。

Answer 1:

假设你可以尝试使用自定义JSON utils的 JMeter的(JSON路径断言,JSON路径抽出,JSON格式化) -在这种情况下JSON路径抽出

  1. 添加ATLANTBH JMeter的组件到JMeter的: https://github.com/ATLANTBH/jmeter-components#installation-instructions 。
  2. (从后置处理组件列表)添加JSON路径抽出的孩子返回要处理JSON响应采样:

    (我用假样模仿你的回应,你将有你的原始采样)

    添加尽可能多的提取是非常重视您想提取(在这种情况下3:“钥匙”,“ID”,“功能”)。

  3. 配置每个提取器:定义变量名来存储提取的值和JSONPath查询以提取相应的值:

    • 对于“钥匙”: $.key
    • 对于“标识”: $.id
    • 对于“特色”: $.features
  4. 此外,在脚本您可以参考使用JMeter的变量(变量名在JSON路径抽出设置指向“名称”字段)提取的值:如${jsonKey}${jsonID} ${$.features}

也许这可能是不是最优化的方式,但它的工作原理。



Answer 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);

欲了解更多信息: http://www.havecomputerwillcode.com/blog/?p=500 。



Answer 3:

一般的解决办法: DEMO

正则表达式: (\[{\n\s*(?:\s*"\w+"\s*:\s*[^,]+,)+\n\s*}\])

说明,你不消耗,你必须正确,每行前有空格的空间,你必须匹配之前消耗他们,这就是为什么不是你的正则表达式真正的工作。 你并不需要花葶的{字符。



文章来源: How to extract everything between 2 characters from JSON response?