当前位置: 首页 > 知识库问答 >
问题:

使用Jayway的可选JsonPath

龙珂
2023-03-14

问题:

我有一个服务,接受一个JSON字符串作为输入。每当某些字段不总是存在时,JSON模式都不同。当这些字段存在时,我如何使用Jayway的JsonPath查询它们的值?

我尝试过的:

我使用了选项。正如Jayway的自述页面所解释的,默认路径为空

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如果路径没有找到,但是我的代码仍然抛出:

通用域名格式。乱穿马路。jsonpath。PathNotFoundException:路径$['somepath'中缺少属性

当我给它一个不存在的路径。有人知道这可能是什么原因吗?

共有1个答案

端木皓君
2023-03-14

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

示例Json

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

如果查询$.foo.tmp,JsonPath将返回null,因为tmp应该是一个叶节点。

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

通用域名格式。乱穿马路。jsonpath。PathNotFoundException,因为tmp不是叶,也不存在。

要绕过此选项,应使用选项。抑制异常

 类似资料:
  • 我有一个问题。我想获取pin码,其中street=='abc strt'<我正在使用Jaway来实现这一点 jaywayxpath:,正在返回

  • 我想使用可选实用程序在JDK8中执行空检查。这是我写的代码,给我一个错误: 这里可以显示或不显示“jcr:description”。如果它存在,我想在description变量中使用该值,如果为null,只需为description设置空白字符串。这里也可以使用Lambda表达式吗?谢谢

  • 当使用Java8类时,有两种方法可以将值包装到Optional中。 我理解是使用的唯一安全方法,但为什么?为什么不直接使用

  • 考虑一个和方法。我想将s映射到s并获得第一个。显而易见的解决方案是使用,但要求返回一个流,而没有方法(或者它是或提供一个方法将其转换为,或将其作为)查看。 我能想出的最好的办法是: 但这似乎是一个很普通的案例,但却显得太冗长了。谁有更好的主意?

  • 我有一个需求,我需要更新JSON中的值。我需要更新的键的路径也是基于一些条件,所以我必须在属性文件中维护路径。这是我的JSON 现在我的要求是假设我需要更新pre_paid的值到N,但需要pre_paid的路径是动态的,因为有时我可能需要更新state_code或sort_code或pre_paid等。所以我使用JSONPath: 我需要将这些路径存储在一些属性文件/DB中。 我能够通过以下代码读

  • 本文向大家介绍swift 可选型的使用详解,包括了swift 可选型的使用详解的使用技巧和注意事项,需要的朋友参考一下  一、基本用法 可选性是Swift提供的一个特殊类型,它为我们编写程序提供便利的条件 swift是强类型语言,当我们需要使用一个变量,既可以为String,也可以为nil时,这时候就需要我们使用可选型。 二、可选型解包使用 三、多层解包(**swift3.0有变化) 四、Opti