You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Wiremock响应模板中提取URL编码JSON数组首个值

提取Wiremock中URL编码JSON数组查询参数的第一个值

问题背景

请求URL:http://myserver:8080/api/userinfo?Logins=%5B%22admin%40my.domain%22%5D,需在Wiremock响应模板中提取Logins查询参数里URL编码JSON数组的第一个值。

已尝试以下模板配置:

{
  "response": {
    "jsonBody": {
      "logins": "{{request.query.Logins}}",
      "jsonPathLogins": "{{jsonPath request.query.Logins '$'}}",
      "jsonPathLogins0": "{{jsonPath request.query.Logins '$.[0]'}}",
      "jsonPathQueryLogins": "{{jsonPath request.query '$.Logins'}}",
      "jsonPathQueryLogins0": "{{jsonPath request.query '$.Logins.[0]'}}",
      "loginsCut": "{{cut request.query.Logins.[0] '\"'}}",
      "loginsCutQuot": "{{cut request.query.Logins.[0] '"'}}",
      "loginsReplace": "{{replace request.query.Logins.[0] '\"' '*'}}",
      "loginsReplaceQuot": "{{replace request.query.Logins.[0] '"' '*'}}"
    }
  }
}

但返回结果始终无法正确提取数组元素:

{
  "logins": "["admin@my.domain"]",
  "jsonPathLogins": "["admin@my.domain"]",
  "jsonPathLogins0": "["admin@my.domain"]",
  "jsonPathQueryLogins": "["admin@my.domain"]",
  "jsonPathQueryLogins0": "["admin@my.domain"]",
  "loginsCut": "["admin@my.domain"]",
  "loginsCutQuot": "["admin@my.domain"]",
  "loginsReplace": "["admin@my.domain"]",
  "loginsReplaceQuot": "["admin@my.domain"]"
}

问题原因

request.query.Logins获取到的是URL解码后的字符串(带HTML转义引号),本质是JSON数组的字符串形式,但Wiremock默认不会自动将该字符串解析为JSON对象。直接使用jsonPath操作时,只会把整个字符串当作单个节点处理,无法识别为数组,因此取不到数组元素。

解决方案

需要先将字符串解析为JSON对象,再用jsonPath提取元素,结合Wiremock模板的parseJson函数实现:

基础版本(无HTML转义)

如果request.query.Logins实际值为["admin@my.domain"],直接解析即可:

{
  "response": {
    "jsonBody": {
      "firstLogin": "{{jsonPath parseJson(request.query.Logins) '$[0]'}}"
    }
  }
}

处理HTML转义版本

如果返回中存在"这类HTML转义字符,需要先用unescapeXml函数转义,再解析:

{
  "response": {
    "jsonBody": {
      "firstLogin": "{{jsonPath parseJson(unescapeXml(request.query.Logins)) '$[0]'}}"
    }
  }
}

说明

  • unescapeXml(request.query.Logins):将带HTML转义的字符串还原为标准JSON字符串,比如["admin@my.domain"]转为["admin@my.domain"]
  • parseJson(...):将JSON字符串解析为JSON数组对象
  • jsonPath(...) '$[0]':提取数组的第一个元素,最终得到admin@my.domain

内容的提问来源于stack exchange,提问作者Eduard Sukharev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:03:10