如何从JSON响应中提取2个字符之间的所有内容?

时间:2013-01-10 10:40:20

标签: regex json jmeter extraction

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

响应是这样的:

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

我试图获得除[{....}]之间的文本以及一个正则表达式之外的所有内容。 我已尝试过这个"key":([^\[\{.*\}\],].+?),但我总是在[{...}]之间获取其他值(在此示例中为成员

你有什么线索吗? 谢谢。

3 个答案:

答案 0 :(得分:2)

假设您可以尝试在jmeter中使用自定义JSON utils(JSON Path Assertion,JSON Path Extractor,JSON Formatter) - 在这种情况下使用 JSON Path Extractor

  1. 将ATLANTBH jmeter-components添加到jmeter:https://github.com/ATLANTBH/jmeter-components#installation-instructions
  2. 将JSON Path Extractor(来自Post Processors组件列表)作为子项添加到采样器,该采样器返回您要处理的json响应:

    enter image description here

    (我使用Dummy Sampler来模拟你的回复,你将拥有原始的采样器)

    enter image description here

    添加与您想要提取的值一样多的提取器(在本例中为3:“key”,“id”,“features”)。

  3. 配置每个提取器:定义变量名称以存储提取的值,并JSONPath query提取相应的值:

    • 代表“key”:$.key
    • 代表“id”:$.id
    • 代表“功能”:$.features
  4. 此外,在脚本中,您可以使用jmeter变量(在“名称”字段中的JSON路径提取器设置中指向的变量名称)引用提取的值: ${jsonKey}${jsonID}${$.features}

    enter image description here

  5. 也许它可能不是最佳方式,但它有效。

答案 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);

有关详细信息:http://www.havecomputerwillcode.com/blog/?p=500

答案 2 :(得分:1)

一般解决方案:DEMO

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

解释,你没有消耗你必须正确的空格,在每一行都有空格之前你必须在匹配之前使用它们,这就是为什么你的正则表达式不能真正起作用的原因。您不需要浏览{字符。