Expected to find an object with property ['data'] in path $['data'] but found 'n...

2025年10月10日 23:29 响应: 3.29秒 状态: success

🚨 错误信息

/ Error: Expected to find an object with property ['data'] in path $['data'] but found 'null'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider

🤖 AI解决方案

/ Error: Expected to find an object with property ['data'] in path $['data'] but found 'null'. This is not a json object according to the JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider

/ 错误:在路径 $['data'] 中,期望找到一个具有 ['data'] 属性的对象,但却找到了 'null'。根据 JsonProvider: 'com.jayway.jsonpath.spi.json.JsonSmartJsonProvider',这不是一个 JSON 对象。

原因分析

JSON 解析器在尝试访问 $['data'] 路径下的数据时,发现该路径的值为 null,而程序期望此处应为一个 JSON 对象(包含 ['data'] 属性)。

解决方案

在访问 $['data'] 之前,检查其是否为 null。如果为 null,则需要根据实际业务逻辑进行处理,例如返回默认值、抛出更友好的异常或跳过后续处理。

// 假设 jsonResponse 是你的 JSON 字符串或对象
Object dataValue = JsonPath.read(jsonResponse, "$['data']");

if (dataValue instanceof Map) {
    // 正常处理,dataValue 是一个 Map (JSON 对象)
    // ...
} else if (dataValue == null) {
    // dataValue 是 null,进行处理
    System.err.println("Warning: 'data' field is null. Skipping processing.");
    // 或者返回默认值, 或者抛出自定义异常
} else {
    // dataValue 不是 Map 也不是 null,可能是一个其他类型的值(如 String, Number, Array)
    System.err.println("Warning: 'data' field is not a JSON object. Found type: " + dataValue.getClass().getName());
    // 根据实际情况处理
}

预防措施

  • 增加对 null 值的校验:在任何可能解析出 null 值的 JSON 路径访问之前,添加显式的 null 值检查。
  • 统一错误处理:如果 null 值表示一种不期望的状态,考虑抛出一个自定义异常,并统一处理此类异常,提供更清晰的错误信息给调用方。