Jmeter json 路径提取器 - 如何从提取的值中删除 []

Jmeter json path extractor - How to Remove [ ] from extracted value

来自

token_id="token_id":"82903430-f9b3-4f4b-9efa-ee1b991cb735"

我正在使用 路径提取器 $..token_id 提取 token_id

然后在下一个 post 请求中使用变量,但它在调用中显示额外的括号

"token_id":["82903430-f9b3-4f4b-9efa-ee1b991cb735"]

在JSON中,括号表示字符串、数字、布尔值、对象和数组的数组。

"token_id" 被解释为字符串数组。示例:

"token_id":["82903430-f9b3-4f4b-9efa-ee1b991cb735"]

确保将 "token_id" 更改为字符串。

我认为这是由 Plugins version 1.3.0 where JSONPath extractor support of returning multiple matching values was introduced 中引入的更改引起的。

您可以使用以下 3 种方法之一解决此问题:

  1. 您可以将 JSONPath 表达式更改为

    $..token_id[0]
    

    因此您不必手动删除括号和引号

  2. 我相信你有这样的东西:

    getToken=["82903430-f9b3-4f4b-9efa-ee1b991cb735"]
    getToken_1=82903430-f9b3-4f4b-9efa-ee1b991cb735
    getToken_matchNr=1
    

    所以只使用 ${getToken_1} 应该很有魅力

  3. 可以使用Beanshell PostProcessor去掉括号和引号。在 提取器 JSONPath 之后添加它,并将以下代码放入 "Script" 区域:

    String getToken = vars.get("getToken");
    getToken = getToken.replaceAll("\[\"(.*?)\"\]", "");
    vars.put("getToken",getToken);
    

按照 Dmitri T 的建议使用 getToken_1 删除多余的括号,因为在 uses array to store the response.

${getToken_1} 是从上面的响应中删除 [] 括号的正确正则表达式。