没想到 JSON 还可以像 XPATH 方式进行操作,简直不要太爽

Jayway JsonPath 是一种 Java 库,用于在 Java 应用程序中解析和操作 JSON 数据。它提供了一种便捷的方式来定位和提取 JSON 文档中的信息,通过使用类似于 XPath 的语法,开发人员能够轻松地选择和操作 JSON 数据。

JsonPath 表达式是由用点分隔的表达式段(或操作符)组成的,这些表达式段可以根据 JSON 文档的结构进行导航。例如,可以使用 JsonPath 表达式来选择 JSON 对象中的特定属性、数组元素或嵌套结构。

除了基本的定位和提取功能外,Jayway JsonPath 还支持条件过滤、数学运算、字符串处理等功能。这使得开发人员能够更加灵活地处理 JSON 数据,并根据需要对其进行转换和操作。

JsonPath 还提供了丰富的操作符和函数库,用于在表达式中执行各种操作。例如,可以使用过滤操作符来筛选符合特定条件的 JSON 元素,或使用数学运算符进行数值计算。此外,JsonPath 还支持自定义函数,开发人员可以根据自己的需求编写函数并在表达式中调用。

Jayway JsonPath 具有良好的性能和可扩展性,适用于各种规模的 JSON 数据处理任务。它提供了灵活的 API 和扩展机制,可以方便地集成到现有的 Java 项目中,使得开发人员能够更高效地处理 JSON 数据。

JsonPath 的主要特点包括:

  • 简洁的语法:JsonPath 使用简单的路径表达式来选择 JSON 数据,类似于 XPath 在 XML 文档中的使用方式。这使得开发人员能够轻松地编写查询和操作 JSON 数据的代码。

  • 强大的功能:JsonPath 支持各种操作符和函数,可以用于过滤、投影、排序和聚合等操作。这使得开发人员能够灵活地处理复杂的 JSON 数据结构。

  • 良好的性能:Jayway JsonPath 库经过优化,提供了高效的 JSON 数据解析和查询性能。这使得在处理大量 JSON 数据时,能够保持较好的性能表现。

  • 广泛的适用性:Jayway JsonPath 适用于各种 Java 应用程序,包括 Web应用程序、RESTful API 客户端、数据处理和转换工具等。它提供了灵活的 API 和扩展机制,可以方便地集成到现有的 Java 项目中。

通过使用 Jayway JsonPath,开发人员可以更加轻松地处理 JSON 数据,提高开发效率和代码质量。同时,它也为 Java 社区提供了一个强大而灵活的 JSON 处理工具,促进了 JSON 数据在 Java 生态系统中的广泛应用。

示例:

在 maven 的 pom.xml 文件中添加如下依赖:

<dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.9.0</version></dependency>

使用 JsonPath.read() 静态方法,提取指定 JSON 字符串中所有书籍(book)的作者信息,代码如下:

package com.hxstrive.json_path;import com.jayway.jsonpath.JsonPath;import java.util.List;/*** Jayway JsonPath 入门示例* @author hxstrive.com*/public class Demo {public static void main(String[] args) {String 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" +"            }," +"            {" +"                \"category\": \"fiction\"," +"                \"author\": \"Herman Melville\"," +"                \"title\": \"Moby Dick\"," +"                \"isbn\": \"0-553-21311-3\"," +"                \"price\": 8.99" +"            }," +"            {" +"                \"category\": \"fiction\"," +"                \"author\": \"J. R. R. Tolkien\"," +"                \"title\": \"The Lord of the Rings\"," +"                \"isbn\": \"0-395-19395-8\"," +"                \"price\": 22.99" +"            }" +"        ]," +"        \"bicycle\": {" +"            \"color\": \"red\"," +"            \"price\": 19.95" +"        }" +"    }," +"    \"expensive\": 10" +"}";// 获取所有书籍的作者List<String> authors = JsonPath.read(json, "$.store.book[*].author");for(String author : authors) {System.out.println("author: " + author);}}}

运行示例,输出如下:

author: Nigel Rees
author: Evelyn Waugh
author: Herman Melville
author: J. R. R. Tolkien

注意,上述示例中,“$.store.book[*].author”是一个 JsonPath 字符串,其中,$ 表示当前整个 JSON 字符串,* 是一个通配符,$.store.book[*] 表示获取所有的书籍信息。 

更多 JSONPATH 教程点击下方链接查看:

  • Jayway JsonPath 教程
  • JsonPath 介绍
  • JsonPath 入门
  • JsonPath 操作符

    • JsonPath $ 操作符
    • JsonPath @ 操作符
    • JsonPath * 操作符
    • JsonPath .. 操作符
    • JsonPath .name 操作符
    • JsonPath ['< name>' (, '< name>')] 操作符
    • JsonPath [< number> (, < number>)] 操作符
    • JsonPath [start:end] 操作符
    • JsonPath [?(< expression>)] 操作符
  • JsonPath 函数

    • JsonPath 内置函数
    • JsonPath min() 函数:求最小值
    • JsonPath max() 函数:求最大值
    • JsonPath avg() 函数:求平均值
    • JsonPath stddev() 函数:求标准偏差
    • JsonPath length() 函数:计算数组长度
    • JsonPath sum() 函数:求和
    • JsonPath keys() 函数:获取节点下的键集合
    • JsonPath concat() 函数:用来连接多个字符串
    • JsonPath first() 函数:获取数组第一个元素
    • JsonPath last() 函数:获取数组最后一个元素
    • JsonPath index() 函数:获取指定下标的元素
  • JsonPath 过滤操作符
  • JsonPath 过滤操作符示例
  • JsonPath 更多示例
  • JsonPath 读取JSON文档
  • JsonPath 返回类型
  • JsonPath 谓词(Predicates)
  • JsonPath 路径与值
  • JsonPath 设置值
  • JsonPath 调整配置
  • JsonPath JsonProvider SPI
  • JsonPath Cache SPI
  • JsonPath 规范

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/11174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

物联网系统

文章目录 一、物联网二、物联网系统1.核心特点2.体系构架3.作用 一、物联网 物联网&#xff08;Internet of Things&#xff0c;IoT&#xff09;是指将各种物理设备&#xff08;如传感器、执行器、嵌入式系统等&#xff09;通过互联网连接起来&#xff0c;并通过云计算系统实现…

通过内网穿透实现远程访问个人电脑资源详细过程(免费)(NatApp + Tomcat)

目录 1. 什么是内网穿透 2. 内网穿透软件 3. NatApp配置 4. 启动NatApp 5. 通过内网穿透免费部署我们的springboot项目 通过内网穿透可以实现远程通过网络访问电脑的资源&#xff0c;本文主要讲述通过内网穿透实现远程访问个人电脑静态资源的访问&#xff0c;下一章节将讲…

C语言/数据解构——(随即链表的复制)

一.前言 嗨嗨嗨&#xff0c;大家好久不见。已经有好几天没更新了。今天我们就分享一道链表题吧——随即链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer废话不多说&#xff0c;让我们直接开始今天的题目分享吧。 二.正文 1.1题目描述 他和单链表不同…

超级好用的C++实用库之点阵字体

&#x1f4a1; 需要该C实用库源码的大佬们&#xff0c;可搜索微信公众号“希望睿智”。添加关注后&#xff0c;输入消息“超级好用的C实用库”&#xff0c;即可获得源码的下载链接。 概述 点阵字体是一种数字字体&#xff0c;其中每个字符都由一定尺寸的像素矩阵组成。比如&…

华为OD机试 - 求幸存数之和(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

机器学习面试篇

如何理解机器学习数据集的概念 数据集是机器学习的基础&#xff0c;它包括了用于训练和测试模型所需的数据。数据集通常以矩阵的形式存在&#xff0c;其中每一行代表一个样本&#xff08;或实例&#xff09;&#xff0c;每一列代表一个特征&#xff08;或属性&#xff09;。…

JVM从1%到99%【精选】-类加载子系统

目录 1.类的生命周期 1.加载 2.连接 3.初始化 2.类的加载器 1.类加载器的分类 2.双亲委派机制 3.面试题&#xff1a;类的双亲委派机制是什么&#xff1f; 4.打破双亲委派机制 1.类的生命周期 类加载过程&#xff1a;加载、链接&#xff08;验证、准备、解析&a…

数据与结构--堆

堆 堆的概念 堆&#xff1a;如果有一个关键码的集合K{k0,k1,k2,…,kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足ki<k2i1且ki<k2i2&#xff08;或满足ki>k2i1且ki>k2i2&#xff09;&#xff0c;其中i0,1,2,…

PostgreSQL自带的命令行工具22- pg_controldata

PostgreSQL自带的命令行工具22- pg_controldata 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;5777pg_controlda…

深度缓冲技术在AI去衣中的神奇作用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图形处理和视觉领域的应用日益增多。AI去衣技术便是其中一个颇具争议但又技术上引人入胜的话题。今天&#xff0c;我们将深入探讨一项关键技术——深度缓冲&#xff08;Depth Buffering&#xff09;&#xff0c;它…

MPLS技术基础

一、MPLS的基本概述 1、MPLS【Multi-Protocol Label Switch|多协议标签交换】 2、MPLS最早由Cisco System公司开发&#xff0c;最早早该技术称之为Tagging Switch&#xff0c;后被IETF&#xff08;internet 工程任务小组&#xff09;改名为MPLS&#xff0c;进而向业界公开推广…

SpringAI 技术解析

1. 发展历史 SpringAI 的发展历史可以追溯到对 Spring 框架的扩展和改进&#xff0c;以支持人工智能相关的功能。随着人工智能技术的快速发展&#xff0c;SpringAI 逐渐成为 Spring 生态系统中的一个重要组成部分&#xff0c;为开发者提供了便捷、灵活的解决方案。 项目的灵感来…

如何用opencv去掉单元格的边框线,以提高Tesseract识别率?

在OpenCV中处理从表格切割下来的图片&#xff0c;并去掉单元格的边框线&#xff0c;以提升Tesseract的识别准确率&#xff0c;确实是一个具有挑战性的任务。在这种情况下&#xff0c;我们需要采取一种策略来预处理图像&#xff0c;使得数字与背景之间的对比度增强&#xff0c;同…

数据缓存,可以尝试RocksDB了

shigen坚持更新文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 个人IP&#xff1a;shigen shigen在最近的学习中&#xff0c;接触到了一款新的缓存数据库RocksDB&#xff…

NodeJS编写后端接口

技术栈 1.express&#xff1a;Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建 各种 Web 应用&#xff0c;和丰富的 HTTP 工具&#xff0c;使用 Express 可以快速地搭建一个完整功能的网站。 2.mysql&#xff1a;用于操作MySQL数据库 3.bod…

Spring:深入理解 Spring 事务原理

Spring 事务 Spring 框架支持两种主要的事务管理方式&#xff1a;编程式事务&#xff08;Programmatic Transaction Management&#xff09;和声明式事务&#xff08;Declarative Transaction Management&#xff09;。 1.编程式事务   编程式事务管理指的是在代码中显式地控…

使用 LangGraph 实现邮件智能处理系统来处理客户咨询【附代码】

简介 在这篇博文中&#xff0c;我们将探讨如何使用 LangGraph 结合 RAG&#xff08;Retrieval-Augmented Generation&#xff09;技术来构建一个响应客户邮件的电子邮件智能系统。LangGraph 是一个强大的框架&#xff0c;专为构建和部署基于图的语言应用而设计。它支持复杂的查…

【Linux】centos7安装软件(rpm、yum、编译安装),补充:查找命令的相关文件路径,yum安装mysql

【Linux】技术上&#xff0c;Linux是内核。而术语上&#xff0c;我们通常说的Linux是完整的操作系统&#xff0c;其实称为"Linux发行版"&#xff0c;是将Linux内核和应用系统打包&#xff0c;由不同的发行家族发行了不同版本。Linux发行版众多&#xff0c;主要有RedH…

职校智慧校园现状及问题分析

各大中职院校及高职院校是校园信息化的先行者和开拓者&#xff0c;很早就开始注重信息化基础设施建设和信息化人文素养的提升。在过去几年里&#xff0c;随着国家大力发展与扶植职校教育&#xff0c;学校投入相当的经费进行了校园信息通信网络、计算机等基础硬件设备建设&#…

Python3 笔记:help()查看函数的用法

一些不常用的函数或是模块的用法记不清了怎么办&#xff1f; Python的内置函数help()可以查看函数或模块用途的详细说明。 操作方法很简单&#xff0c;直接在help()括号内填写参数&#xff0c;然后运行就可以看到结果了。 举例&#xff1a; help(input) # 查询input()函数的…