2

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

响应是这样的:

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

我正在尝试使用一个正则表达式来获取除文本之外的所有内容[{....}]。我试过这个,"key":([^\[\{.*\}\],].+?)但我总是得到其他值[{...}](在这个例子中:member

你有什么线索吗?
谢谢。

4

3 回答 3

2

假设您可以尝试为 jmeter使用自定义JSON工具(JSON 路径断言、JSON 路径提取器、JSON 格式化程序)——在这种情况下为JSON 路径提取器。

  1. 将 ATLANTBH jmeter-components 添加到 jmeter:https ://github.com/ATLANTBH/jmeter-components#installation-instructions 。
  2. 将 JSON 路径提取器(来自 Post Processors 组件列表)作为子级添加到返回要处理的 json 响应的采样器:

    enter image description here

    (我使用 Dummy Sampler 来模拟您的响应,您将拥有原始采样器)

    enter image description here

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

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

    • for "key": $.key
    • for "id": $.id
    • for "features": $.features
  4. Further in script your can refer extracted values using jmeter variables (variable name pointed in JSON Path Extractor settings in "Name" field): e.g. ${jsonKey}, ${jsonID}, ${$.features}.

    enter image description here

Perhaps it may be not the most optimal way but it works.

于 2013-01-10T16:33:07.807 回答
2

My solution for my problem was to turn the JSON into an object so that i can extract just the value that i want, and not the values in the {...}.

Here you can see my code:

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

For more information: http://www.havecomputerwillcode.com/blog/?p=500.

于 2013-01-14T22:47:19.417 回答
1

通用解决方案:DEMO

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

解释,您没有正确使用必须的空格,在每行之前有空格并且您必须在匹配之前使用它们,这就是为什么您的正则表达式不能真正起作用的原因。您不需要对{字符进行转义。

于 2013-01-10T11:46:35.543 回答