【问题标题】:How to extract value from serialized json response in Jmeter如何从 Jmeter 中的序列化 json 响应中提取值
【发布时间】:2022-01-21 03:57:51
【问题描述】:

我收到以下 api 请求的序列化 json 格式的响应

{"Data":"{\"orderId\":null,\"Tokens\":{\"Key\":\"abcdefgh123456\",\"Txnid\":\"test_5950\"}","success":true,"Test":"success"}

我想在 Jmeter 中提取 Key 值,我必须在下一个请求中使用。有人可以帮我提取价值吗?

【问题讨论】:

    标签: jmeter


    【解决方案1】:

    您的 JSON 似乎不正确。有效的 JSON 应该是这样的:

    {
       "Data":{
          "orderId":null,
          "Tokens":{
             "Key":"abcdefgh123456",
             "Txnid":"test_5950"
          },
          "success":true,
          "Test":"success"
       }
    }
    
    • JSON Extractor 添加到要从中提取键值的请求中。
    • 分配一个变量名,即key
    • JSON 路径表达式将为:.Data.Tokens.Key
    • 将提取的值作为${key} 用于下一个请求。

    【讨论】:

    • 感谢您的回复...但是我的 json 是序列化的形式。我更新了问题中的确切 json。早些时候我发布了没有选择代码 sn-p 的响应。对此感到抱歉。
    • 在这种情况下,您必须使用正则表达式提取器并将正则表达式设置为 \\"Key\\"?\s*:?\s*\\"(\w+)\\" 。你也可以在这里测试它regex101.com
    【解决方案2】:

    如果您的 JSON 看起来确实与您发布的完全一样,那么最合适的后处理器将是 Regular Expression Extractor

    相关的正则表达式是这样的:

    "Key"?\s*:?\s*"(\w+)"
    

    地点:

    • ``?\s*` - 任意数量的空格(以防万一)
    • \w - 匹配“word”字符(字母数字加下划线)
    • + - 重复
    • () - 分组

    更多信息:

    【讨论】:

    • 感谢您的详细解答。但它适用于序列化的 json 吗?问题中更新了确切的 json 格式。早些时候我发布了没有选择代码 sn-p 的响应。对此感到抱歉。
    • 不是“序列化”,而是“转义”,在这种情况下,您需要将正则表达式更新为\\"Key\\"?\s*:?\s*\\"(\w+)\\"。我不知道这是复制粘贴问题还是Data 部分中的“序列化” JSON 真的无效,如果它有效 - 您可以使用 2 JSON JMESPath Extractors,第一个获得 Data 部分,并且第二个从 Data JMeter 变量中获取Token.Key
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多