JSON键包含点号时Rest Assured JsonPath取值为null如何解决
问题原因
Rest Assured 内置的 JsonPath 实现与通用在线 JsonPath 校验工具的标准实现存在差异,默认会将键名中的.识别为嵌套对象的分隔符,即使使用括号语法,部分旧版本 Rest Assured 仍然会优先解析.为嵌套分隔符,导致无法匹配到完整键名。
解决方法
方案1:使用无$前缀的括号访问语法
Rest Assured 的 JsonPath 不需要显式写根路径$,直接修改取值代码即可,适配绝大多数版本:
String value = jsonPath.getString("['organization.email'][0]");
方案2:分步取值
先获取键对应的完整数组,再取下标元素,兼容性更强:
List<String> errorList = jsonPath.getList("['organization.email']", String.class); String value = errorList.get(0);
方案3:调整JsonPath配置
修改 JsonPath 配置,将键分隔符替换为不会出现在键名中的字符,就可以直接用带点的键名取值:
JsonPath jsonPath = JsonPath.from(jsonString).using(new JsonPathConfig().keySeparator('~')); String value = jsonPath.getString("organization.email[0]");
方案4:转Map原生取值
如果以上方案都不生效,直接把JSON转成Map用原生Java方式取值,100%兼容所有场景:
Map<String, Object> resMap = jsonPath.getMap("$"); List<String> errorList = (List<String>) resMap.get("organization.email"); String value = errorList.get(0);
内容的提问来源于stack exchange,提问作者cyrilgeorge153
相关产品推荐
相关产品推荐

