【问题标题】:Optional JsonPath using Jayway使用 Jayway 的可选 JsonPath
【发布时间】:2016-07-19 03:46:35
【问题描述】:

问题:

我有一个接受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:路径 $['somepath'] 中缺少属性

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

【问题讨论】:

    标签: java json jsonpath


    【解决方案1】:

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

    Json 示例

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

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

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

    com.jayway.jsonpath.PathNotFoundException 因为 tmp 不是叶子并且不存在。

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

    【讨论】:

    • 我们如何自动添加这些路径?有没有办法这样做。
    • 感谢您的回答。 Option.SUPPRESS_EXCEPTIONS 解决了我的问题,这与你的问题相似。
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多