com.jayway.jsonpath.PathNotFoundException报错的解决方法,亲测有效,嘿嘿嘿

SpringBoot+JaywayJsonPath实现Json数据的DSL(按照指定节点表达式解析json获取指定数据) 在上面搭建SpringBoot项目的基础上,并且在项目中引入fastjson、hutool等所需依赖后。需要对接第三方接口,接口返回的json数据需要解析获取数据。可以通过配置每个返回字段的对应json数据的表达式,使其在代码中根据配置的表达式动态获取。 阅读详情

com.jayway.jsonpath.PathNotFoundException 异常

问题分析

com.jayway.jsonpath.PathNotFoundException 异常是在使用 Jayway JsonPath 库查询 JSON 数据时,如果提供的 JSONPath 表达式在 JSON 文档中找不到对应的路径或节点,就会抛出此异常。这通常意味着 JSONPath 表达式可能是错误的,或者它尝试访问的 JSON 数据结构与你预期的不同。

报错原因

报错原因可能有以下几点:

  1. JSONPath 表达式错误:提供的 JSONPath 表达式可能存在语法错误,或者它不符合 JSON 数据的实际结构。
  2. JSON 数据结构不匹配:你期望的 JSON 数据结构与实际的 JSON 数据结构不匹配,导致 JSONPath 表达式无法找到对应的路径。
  3. JSON 数据为空或不存在:你尝试在一个空的或不存在的 JSON 数据上应用 JSONPath 表达式。
解决思路
  1. 检查 JSONPath 表达式:确保 JSONPath 表达式是正确的,并且符合 JSON 数据的实际结构。
  2. 检查 JSON 数据:打印或查看你正在处理的 JSON 数据,确保它与你的预期一致。
  3. 使用工具验证:使用在线 JSONPath 验证工具或 IDE 插件来验证你的 JSONPath 表达式是否正确。
  4. 逐步调试:从简单的 JSONPath 表达式开始,逐步增加复杂度,直到找到问题的根源。
解决方法

以下是一个简单的示例,说明如何处理和解决 com.jayway.jsonpath.PathNotFoundException 异常:

  1. 示例 JSON 数据:
{
  "store": {
    "book": [
      {
        "category": "reference",
        "author": "Nigel Rees",
        "title": "Sayings of the Century",
        "price": 8.95
      },
      {
        "category": "fiction",
        "author": "Evelyn Waugh",
        "title": "Sword of Honour",
        "price": 12.99
      }
    ],
    "bicycle": {
      "color": "red",
      "price": 19.95
    }
  },
  "expensive": 10
}
  1. 错误的 JSONPath 表达式(这将导致 PathNotFoundException):
  2. 下滑查看解决方法

String json = "..."; // 假设这是上面的 JSON 字符串
String author = JsonPath.read(json, "$.store.books[0].author"); // 注意这里使用了 "books" 而不是 "book"
if (author == null) {
    // 处理异常或错误情况
    throw new RuntimeException("无法找到作者信息");
}
  1. 修正后的 JSONPath 表达式:
String author = JsonPath.read(json, "$.store.book[0].author"); // 修正为 "book" 而不是 "books"
if (author == null) {
    // 仍然需要处理可能为 null 的情况,但这次是因为其他原因(例如 JSON 数据为空)
    throw new RuntimeException("无法找到作者信息或 JSON 数据为空");
}
  1. 处理可能的 null 值:即使 JSONPath 表达式是正确的,你仍然需要处理可能为 null 的返回值。这可以通过在读取之前检查 JSON 数据是否存在,或者使用 Java 的 Optional 类来实现。

在 Java 中,当使用 Jayway JsonPath 库读取 JSON 数据时,如果 JSONPath 表达式对应的值不存在,那么 JsonPath.read() 方法会返回 null。为了处理这种可能的 null 值,你可以使用条件判断来检查返回值,或者使用 Java 8 引入的 Optional 类来避免空指针异常。

使用条件判断

String json = "{\"store\": {\"book\": [{\"author\": \"Nigel Rees\"}]}}";
String author = JsonPath.read(json, "$.store.book[0].author");

if (author == null) {
    // 处理 author 为 null 的情况
    System.out.println("无法找到作者信息");
} else {
    System.out.println("作者信息: " + author);
}

使用 Optional

使用 Optional 可以使代码更加健壮,并避免空指针异常。但是,请注意,JsonPath 库本身并不直接返回 Optional 对象,所以你需要手动封装它。

import java.util.Optional;

// ...

String json = "{\"store\": {\"book\": [{\"author\": \"Nigel Rees\"}]}}";
Optional<String> optionalAuthor = Optional.ofNullable(JsonPath.read(json, "$.store.book[0].author"));

optionalAuthor.ifPresent(author -> System.out.println("作者信息: " + author));
optionalAuthor.orElseThrow(() -> new RuntimeException("无法找到作者信息"));
// 或者使用 orElse 提供默认值
String defaultAuthor = optionalAuthor.orElse("未知作者");
System.out.println("作者信息(或默认值): " + defaultAuthor);
  1. 使用 JSONPath 调试器:如果你不确定 JSONPath 表达式是否正确,可以使用在线的 JSONPath 调试器来测试它。这些工具允许你输入 JSON 数据和 JSONPath 表达式,并立即看到结果。

使用 JSONPath 调试器

如果你不确定 JSONPath 表达式是否正确,可以使用在线的 JSONPath 调试器来测试它。以下是一个简单的步骤说明如何使用在线调试器:

  1. 打开一个在线的 JSONPath 调试器,例如 JSONPath Online Evaluator。
  2. 在左侧的输入框中粘贴你的 JSON 数据。
  3. 在右侧的输入框中输入你的 JSONPath 表达式。
  4. 点击“Evaluate”按钮来查看结果。

如果 JSONPath 表达式是正确的,并且 JSON 数据中存在对应的路径,那么结果区域将显示该路径对应的值。如果表达式错误或路径不存在,则结果区域可能为空或显示错误信息。

json-path-2.7.0.zip:实现了对JSON的便捷读取 <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.7.0</version> <name>project ':json-path'</name> <description>Java port of Stefan Goessner JsonPath.</description> 立即下载

相关推荐

Gartner DSG数据安全治理 架构及解读

目录背景:架构图: 解释:英文解释:(自上而下)平衡业务与风险、威胁、合规之间的关系(5个维度之间的平衡)优先处理数据集制定安全策略实施安全工具策略配置同步从上到下,从需求调研开始实施数据安全治理。千万不要跨过数据摸底、治理优先级分析、制定治理整体策略,而直接从技术工具开始对数据安全进行治理。 先明确选择需要治理的对象,优先选择重要数据进行数据安全治理工作。可以通过数据梳理、分类分级等手段,完成数据资产盘点和筛选,在纷杂的数据中理清头绪。

锦慈的技术博客 7217

Jayway JsonPath介绍

XML的一个经常强调的优点是可以使用大量工具来分析,转换和有选择地从XML文档中提取数据,XPath是这些功能强大的工具之一。jsonPath类似Xpath,可以在json数据结构中进行分析。 对比XPath和JsonPath表达式如下: XPath JSONPath Description / $ the root object/element . @ the current object/element / . or [] child op

赶路人儿 6878

用FPGA驱动WS2812B点阵,手把手教你实现动态文字显示(附完整Verilog代码)

本文详细介绍了如何使用FPGA驱动WS2812B点阵实现动态文字显示,包括硬件连接、Verilog代码实现和动态效果设计。通过精确的时序控制和数据处理,读者可以掌握FPGA与WS2812B的交互技术,并实现炫酷的显示效果。附完整Verilog代码,适合硬件爱好者和工程师参考实践。

weixin_30482383的博客 669

com.jayway.jsonpath.PathNotFoundException报错的解决方案

com.jayway.jsonpath.PathNotFoundException 是由 json-path 库在解析 JSON 数据时抛出的一个异常。json-path 是一个 Java 库,用于从 JSON 文档中抽取信息,它提供了一种类似 XPath 的语法来定位 JSON 数据中的元素。当指定的 JSONPath 表达式在 JSON 文档中找不到匹配的路径时,就会抛出 PathNotFoundException。

2301_79779756的博客 1111

Cloudflare SaaS 优选IP实战:提升大陆访问速度的配置指南

本文详细介绍了如何通过Cloudflare SaaS优选IP提升中国大陆用户访问速度的配置指南。从基础环境准备到IP筛选方法,再到完整配置流程和效果验证,帮助用户突破免费套餐限制,精准优化网络线路,特别适合跨境电商和面向中国大陆用户的网站优化。

weixin_29231027的博客 683

机场数据治理系列介绍(1):机场行业数据中台中的数据管理顶层设计方案

民航机场行业的数据中台中,有关数据管理顶层设计方案需要结合机场行业的业务特点和技术需求进行具体的设计,今日我们简要考量设计提供一个参考方案:

机场信息系统研究员的专栏 1604

Jayway - Json-Path 使用(一)

一、JSONPath使用需要的包 <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> <version>2.4.0</version> </dependency> 二、使用说明 1、JSONPath是xpath在json的应用 2、JSONPath 是参照.

4447

从零开始讲DDR(8)——AXI 接口MIG 使用(1)

我们简单拆解了MIG AXI接口中测试文件的整体框架,首先在sim_tb_top.sv文件中例化了DDR模型和example_top。在example_top中,又例化了MIG IP和一个流量产生器ddr4_v2_2_8_axi_tg_top。在ddr4_v2_2_8_axi_tg_top中的主要功能是分别例化了boot_mode_gen,prbs_mode_gen,custom_mode_gen和axi_opcode_gen。

apple_53311083的博客 1590

已解决com.jayway.jsonpath.PathNotFoundException异常的正确解决方法,亲测有效!!!

已解决com.jayway.jsonpath.PathNotFoundException异常的正确解决方法,亲测有效!!!

小明的Java问道之路 3569

uniapp - 解决控制台提示“同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示”,uniApp安卓/苹果App真机运行调试显示同步资源失败,无任何授权提示且无法连接

uni-app,报错,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,提示错误解决,HbuilderX,uniapp同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示同步失败,安卓基座调试,没有反应,真机没有提示怎么办,如何解决这个问题,苹果ios手机,电脑模拟器运行,adb连接,连接失败,报错出错,uniapp真机运行的时候显示同步资源失败,未得到同步资源的授权,plugins里面没有tools,找不到tools,还是不行,重新打基座

🏆 前端领域优质创作者 1万+

前端build工程的时候 出现 `build.rollupOptions.external 的解决方法

看到这个Bug,理性分析: 遇到 Rollup failed to resolve import “@vue/devtools-api” 错误可能是由于 Pinia 使用了 @vue/devtools-api 模块,而 Vite 的 Rollup 插件无法解析这个模块 ps:但是我前一秒还可以,加了个别代码,突然不行,我是不相信的 = - =

码农研究僧的博客 3055

【Java】已解决:com.jayway.jsonpath.PathNotFoundException

场景:在一个Spring Boot项目中,开发者使用JsonPath库从一个复杂的JSON对象中提取特定字段的数据。例如,从一个包含用户信息的JSON对象中提取用户的电子邮件地址。为了解决该报错问题,我们可以在读取JSON路径时添加默认值或先检查路径是否存在。在Java开发中,使用JsonPath库进行JSON数据解析时,开发者可能会遇到。这个异常通常在尝试访问不存在的JSON路径时抛出。异常,并处理路径不存在的情况,从而避免程序崩溃。报错问题,确保JSON数据解析的正确性和稳定性。

屿小夏.的知识博客 1259

通过实例讲解瀑布模型

在电子商城开发中,瀑布模型如同 “工业时代的流水线”—— 能通过标准化流程交付高质量、高合规性的系统,但也可能因缺乏灵活性而错失市场机会。其优势与缺点本质上源于同一核心特征:严格的阶段性与文档驱动。决策建议若开发传统型、长周期、需求固定的电子商城(如企业内部采购平台),可优先选择瀑布模型,并通过 “需求预验证 + 模块化设计” 降低风险;若开发创新型、短周期、需快速迭代的电商平台(如社交电商、跨境电商),建议采用敏捷模型或混合模型(如瀑布 + Scrum),平衡规范性与响应速度。

跟佟格湾一起学习计算机知识吧~ 271

Automa 条件逻辑怎么用:给自动化工作流加上分支判断

用 Automa 做浏览器自动化时,固定顺序的工作流遇到页面变化就会卡住。本文通过登录状态检测、按钮出现判断等场景,说明条件逻辑在 Automa 工作流里怎么配、失败分支如何兜底,以及跑完怎么确认条件流真的生效。 ## 页面状态变了,流程为什么会卡住 你搭过这样一条 Automa 流程:打开页面、点击按钮、抓取文本、保存。第一次跑通了,第二次却在“点击按钮”这一步停住——那个按钮当时并不在页面

gitblog_00428的博客 199

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JsonPath:json解析神器(缓存项目中的使用)

最近要做的缓存项目中用到了jsonpath,这个工具主要是用来在多层嵌套的json中去取出对应的值。 项目介绍: 因为我们项目设计是提供一个细致到方法参数级别的缓存,中间也用到了redis,通过将项目名,类名,方法名,参数类型,已经参数的取值规则配置到redis中去,这点是通过springaop中的环绕通知去做的,获取某个包下的类,或者是jar包下,相对路径下的类等,在通过反射获取对应的方法的...

weixin_40805079的博客 3142

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring Boot 自定义参数解析器:实现 @JsonParam 注解解析 JSON 请求体

由于之前用@RequestParam无法接收request payload 正文格式为json格式的字符串,只能使用@RequestBody整个接收,觉得麻烦,但是spring自带的参数解析器不具有这种功能,只能尝试着用自定义参数解析器去解决。 自定义解析器需要实现HandlerMethodArgumentResolver接口,HandlerMethodArgumentResolver接口包含两...

ywl470812087的博客 13万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Fastjson AutoType机制深度解析:从原理到安全实践

JSON反序列化是Java开发中数据交换的核心环节,其本质是将文本格式的JSON数据转换为强类型的Java对象。这一过程的关键挑战在于类型映射,即如何将无类型的JSON键值对准确地还原为具体的类实例。为了解决多态场景下的类型识别问题,Fastjson引入了AutoType机制,允许通过@type字段在JSON中声明目标Java类型,从而实现灵活的反序列化。然而,这项强大的功能也带来了严重的安全风险,攻击者可能通过构造恶意@type值,利用类加载和缓存机制绕过安全校验,最终触发远程代码执行漏洞。因此,深入理解

weixin_34210740的博客 390

使用com.jayway.jsonpath.JsonPath包进行JSON的快速解析、设置值需要注意的性能提升方法...

一、包地址   1、Maven:http://mvnrepository.com/artifact/com.jayway.jsonpath/json-path <!-- https://mvnrepository.com/artifact/com.jayway.jsonpath/json-path --> <dependency> <gr...

a616735104的博客 2474

JsonPath教程

1. 介绍类似于XPath在xml文档中的定位,JsonPath表达式通常是用来路径检索或设置Json的。其表达式可以接受“dot–notation”和“bracket–notation”格式,例如$.store.book[0].title、$[‘store’][‘book’][0][‘title’]2. 操作符 符号 描述 $ 查询的根节点对象,用于表示一个json数据,可以是数组或

koflance的博客 6万+

Spring Boot 中使用 JSONPath 高效处理 JSON 数据

JSONPath 是一种用于从 JSON 文档中提取特定数据的查询语言。它的语法简洁直观,类似于 JavaScript 对象属性的访问方式。

风象南的专栏 735

JsonPath实战

概述、入门、JsonPath表达式、函数支持、过滤器运算符、实战、Exception、谓词(内联谓词、过滤器谓词、自定义谓词)、Configuration、Option、SPI(cache、json、mapper)

lonelymanontheway的博客 2109

使用 JSONPath 解析 JSON 完整内容详解

JsonPath是一种简单的方法来提取给定JSON文档的部分内容。 JsonPath有许多编程语言,如Javascript,Python和PHP,Java。 JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。下面我把官网介绍的每个表达式用代码实现,可以更直观的知道该怎么用它。 GitHub:https://github.com/json-path/JsonPath 以下是从GitHub中用我蹩脚的英格利希,翻译过来的,将就着看吧,推荐

技术小站 2274

Cannot resolve .....报错问题解决

当导入maven管理的项目后,maven进行自动的下载和解析依赖,有时候因为网络问题,等待太久没下载好,我们就关闭了IDEA,再次打开IDEA时就会报错某某依赖无法解析:Cannot resolve …,是因为我们下载到一半就关闭了IDEA,导致下载的内容不全,所以无法解析. 此时的解决方法是复制报错依赖的版本号前的那段依赖名称:如下图 在utools的everything插件里查找该依赖:如下图 切换到该文件夹,我们就能看待报错的依赖:如下图 我们将该依赖直接删除,或者点击该依赖文件进去找到尾缀为.l

张老板的博客 5万+

Java(27):Java JsonPath 解析JSON数据

Java JsonPath 解析JSON数据 简介: JSONPath - 用于JSON的XPath,用来解析多层嵌套的json数据;是一种信息抽取类库,是从JSON文档中抽取指定信息的工具. JsonPath有许多编程语言,如Javascript、Python、PHP、Java等 JsonPath提供的json解析非常强大,它提供了类似正则表达式的语法,基本上可以满足所有你想要获得的json内容。 一、JsonPath安装 添加依赖: 目前在https://github.com/json-pa

fen_fen的专栏 3820
上一篇: feign.FeignException$NotFound报错的解决方法,亲测有效,嘿嘿嘿
下一篇: com.netflix.hystrix.exception.HystrixRuntimeException ERROR SimpleMessage Hystrix报错的解决方法,亲测有效,嘿嘿嘿
代码无疆
博客等级 码龄3年 4万+粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值