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

使用带星号数组后,JsonPath路径不存在时未抛出异常咨询

问题分析

Jayway JsonPath默认采用宽松配置模式,当通过[*]遍历数组元素时,若某个元素不存在指定的属性键,会直接跳过该元素而不抛出异常。当所有数组元素都缺失目标键时,最终会返回空列表,而非抛出PathNotFoundException。

解决方案

要实现不存在属性键时抛出异常的需求,需修改JsonPath的配置,启用REQUIRE_PROPERTIES选项。该选项会强制校验路径中指定的属性必须存在,否则触发异常。

修改后的代码示例

package main.java;

import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.Option;

public class CheckValidPath {
    public static void main(String[] args) {
        String json = "{\n" +
                "    \"store\": {\n" +
                "        \"book\": [\n" +
                "            {\n" +
                "                \"category\": \"reference\",\n" +
                "                \"author\": \"Nigel Rees\",\n" +
                "                \"title\": \"Sayings of the Century\",\n" +
                "                \"price\": 8.95\n" +
                "            },\n" +
                "            {\n" +
                "                \"category\": \"fiction\",\n" +
                "                \"author\": \"Evelyn Waugh\",\n" +
                "                \"title\": \"Sword of Honour\",\n" +
                "                \"price\": 12.99\n" +
                "            },\n" +
                "            {\n" +
                "                \"category\": \"fiction\",\n" +
                "                \"author\": \"Herman Melville\",\n" +
                "                \"title\": \"Moby Dick\",\n" +
                "                \"isbn\": \"0-553-21311-3\",\n" +
                "                \"price\": 8.99\n" +
                "            },\n" +
                "            {\n" +
                "                \"category\": \"fiction\",\n" +
                "                \"author\": \"J. R. R. Tolkien\",\n" +
                "                \"title\": \"The Lord of the Rings\",\n" +
                "                \"isbn\": \"0-395-19395-8\",\n" +
                "                \"price\": 22.99\n" +
                "            }\n" +
                "        ],\n" +
                "        \"bicycle\": {\n" +
                "            \"color\": \"red\",\n" +
                "            \"price\": 19.95\n" +
                "        }\n" +
                "    },\n" +
                "    \"expensive\": 10\n" +
                "}";

        // 配置启用REQUIRE_PROPERTIES选项
        Configuration config = Configuration.builder()
                .options(Option.REQUIRE_PROPERTIES)
                .build();

        // 正确路径可正常执行
        System.out.println(JsonPath.using(config).parse(json).read("$.store.book[*].author").toString());
        // 错误路径会抛出PathNotFoundException
        System.out.println(JsonPath.using(config).parse(json).read("$.store.book[*].anyRandomKey").toString());
    }
}

补充说明

  • Option.REQUIRE_PROPERTIES会强制JsonPath校验路径中所有属性的存在性,一旦发现缺失的属性,立即抛出PathNotFoundException。
  • 若需要更严格的校验规则,还可以结合FAIL_ON_MISSING_PROPERTY等其他选项,但REQUIRE_PROPERTIES已能满足当前场景的核心需求。

内容的提问来源于stack exchange,提问作者Apurv Upreti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:24:32