gpt4 book ai didi

java - 使用 Jayway 的可选 JsonPath

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:07 24 4
gpt4 key购买 nike

问题:

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

我尝试过的:

我使用 Option.DEFAULT_PATH_LEAF_TO_NULL 作为 Jayway 的 readme page解释

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']

当我给它一条不存在的路径时。有谁知道这可能是什么原因造成的?

最佳答案

我意识到我做错了什么。 DEFAULT_PATH_LEAF_TO_NULL 选项只处理叶节点。例如:

示例 Json

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

如果查询$.foo.tmp,JsonPath 将返回null,因为tmp 被假定为叶节点。

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

com.jayway.jsonpath.PathNotFoundException as tmp isn't a leaf and is not present.

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

关于java - 使用 Jayway 的可选 JsonPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38449267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com