使用 Jayway 的可选 JsonPath

2022-09-03 02:07:55

问题:

我有一个服务,它接受字符串作为输入。架构在每次某些字段并不总是存在的情况下都是不同的。当这些字段存在时,如何使用 Jayway 的值查询这些字段的值?JSONJSONJsonPath

我尝试过:

我使用了Jayway的自述文件页面解释Option.DEFAULT_PATH_LEAF_TO_NULL

Configuration config = Configuration.defaultConfiguration()
    .addOptions(Option.DEFAULT_PATH_LEAF_TO_NULL);
if (JsonPath.isPathDefinite(attribute.jsonPath))
{
    String value = JsonPath.using(config).parse(currentTx).read(attribute.jsonPath);
    if (value != null)
    {
        attributeValues.add(value);
    }
}
else
{
    List<String> attributeValuesArray = JsonPath.using(config).parse(currentTx).read(attribute.jsonPath);

    for (String value : attributeValuesArray)
    {
        if (value != null)
        {
            attributeValues.add(value);
        }
    }
}

如果找不到路径,这应该会返回,但是我的代码仍然会抛出:JsonPath.read()null

com.jayway.jsonpath.PathNotFoundException: Missing property in path $['somepath']

当我给它一个不存在的路径。有谁知道可能导致这种情况的原因吗?


答案 1

我意识到我做错了什么。该选项仅负责叶节点。例如:DEFAULT_PATH_LEAF_TO_NULL

示例 Json

{
    "foo":{
        "bar":"value"
    }
}

如果被查询,JsonPath 将返回,因为 tmp 被认为是一个叶节点。$.foo.tmpnull

如果被查询,JsonPath 将抛出一个$.tmp.tmp2

com.jayway.jsonpath.PathNotFoundException,因为 tmp 不是叶子,也不存在。

为了绕过这一点,应该使用.Option.SUPPRESS_EXCEPTIONS


答案 2