无法从带特殊转义字符的JSON响应中提取Collections值如何解决
JSON提取器无法提取Collections数组Id的解决方案
首先需要明确:你当前提供的JSON响应存在截断、语法非法两个问题,这是提取器无法正常工作的核心原因,按以下步骤排查修复即可:
- 第一步:补全并修复JSON语法
你贴出的响应末尾仅到"C就中断,且路径字段"ABC":"\XYZ\collection\","中的反斜杠未做转义,不符合JSON规范。JSON要求反斜杠必须转义为\\,且所有括号、引号必须闭合,你需要先拿到完整的响应体,修复上述语法问题后再做提取。 - 第二步:使用正确的JSON提取语法
针对合法的完整JSON结构,提取Collections数组下所有Id的通用语法为$.Collections[*].Id,不同工具的使用方式如下:- JMeter JSON提取器:将上述语法填入
JSON Path Expression输入框,匹配规则选择匹配所有结果,即可将所有Id值存入带索引的变量中,可通过变量名_N的格式读取第N个Id - Python jsonpath库:调用
jsonpath.jsonpath(解析后的JSON对象, "$.Collections[*].Id"),会直接返回所有Id组成的列表 - Postman测试脚本:使用
pm.response.json().Collections.map(item => item.Id)即可拿到所有Id的数组
- JMeter JSON提取器:将上述语法填入
- 第三步:特殊场景适配
如果服务端返回的响应始终带未转义的反斜杠,你可以先对原始响应字符串做替换处理,把所有单独的\替换为\\后再交给JSON解析器解析,再执行提取操作。
合法JSON示例参考
{ "Version": 10, "Collections": [ {"Id":"*******","Name":"","Description":null,"IsValid":false,"ABC":"\\XYZ\\collection\\","C":"测试字段值1"}, {"Id":"abc1234","Name":"","Description":null,"IsValid":false,"ABC":"\\XYZ\\collection2\\","C":"测试字段值2"} ] }
使用上述提取语法可成功提取到["*******", "abc1234"]两个Id值。
内容的提问来源于stack exchange,提问作者Prateek
相关产品推荐
相关产品推荐

