JSON数据解析 之JSONPath

article/2025/11/10 22:49:37

一:JSONPath说明:

JSONPath是一种通过配置正则表达式语法,抽取json中的指定数据的一种类库;

二:需要的jar依赖(依赖阿里巴巴的fastjson.jar)

maven用户可通过maven远程仓库获取配置地址

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>

 非maven项目,可下载fastjson.jar导入

三:JSONPath通配符

JSONPath正则表达式说明:
$根元素
@当前元素
*通配符,表示任意元素
..递归搜索,深层扫描
.子节点元素
[i]数组下标 i 下的数据,i为正为正序,i为负为倒叙
[start:end]数组片段,区间是[start:end],
[?()]过滤表达式
<,>,>=,<=,!=,=~,搭配操作符使用
length()搭配函数使用

 

案例:有以下json数据:jsonDataStr

1.递归遍历所有age字段:"$..age"

Object obj1 = JSONPath.read(jsonDataStr, "$..age");
System.out.println("所有age字段:\n"+obj1.toString());

控制台输出:

2.查找grade下的所有字段数据 :$.grade.*(截图不全,这种方式很少用)

Object obj2 = JSONPath.read(jsonDataStr, "$.grade.*");
System.out.println("grade下的所有字段数据 \n"+obj2.toString());

控制台输出:

3.通过下标获取数组的指定数据 :$.grade.class[1],$.grade.class[-1],因为数组下标从0 开始,所以下标为1获取的是第二个数据,这里-0按照下标为0处理了,所以-1输出的是倒数第一个数据

Object obj7 = JSONPath.read(jsonDataStr, "$.grade.class[1]");
System.out.println("数组角标为1的数据: \n"+obj7.toString());
        
Object obj8 = JSONPath.read(jsonDataStr, "$.grade.class[-1]");
System.out.println("数组角标为-1的数据: \n"+obj8.toString());

控制台输出:

4.数组片段,区间输出

//输出数组class中从下标1开始到结束

Object obj5 = JSONPath.read(jsonDataStr, "$.grade.class[1:]");
System.out.println(obj5.toString());
//输出数组class 中下标从0开始,到下标为1结束
Object obj9 = JSONPath.read(jsonDataStr, "$.grade.class[:1]");
System.out.println(obj9.toString());
//输出数组class 中下标从1开始到下标为2结束
Object obj6 = JSONPath.read(jsonDataStr, "$.grade.class[1:2]");
System.out.println(obj6.toString());
//输出数组class 中倒数第二个到结束
Object obj10 = JSONPath.read(jsonDataStr, "$.grade.class[-2:]");
System.out.println(obj10.toString());
//输出数组class 中下标从0开始到倒数第三条数据时结束
Object obj14 = JSONPath.read(jsonDataStr, "$.grade.class[:-3]");
System.out.println(obj14.toString());

数据太多,这里不一一打印;

5.过滤表达式:

//输出class数组中含有classTea的数组字段,这里数组的第二条数据将不输出
Object obj11 = JSONPath.read(jsonDataStr, "$.grade.class[?(@.classTea)]");
System.out.println(obj11.toString());

//输出class数组中age字段大于12的列,注意:age的value值为int类型
Object obj12 = JSONPath.read(jsonDataStr, "$..class[?(@.age>12)]");
System.out.println(obj12.toString());

//class数组的length数组长度
Object obj13 = JSONPath.read(jsonDataStr, "$..class.length()");
System.out.println("class 的数组长度:"+obj13.toString());

个人整理,有很多不全的地方,欢迎大家提问讨论,

更多JSONPath 点我

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/4gRYrRrM.shtml

相关文章

一文搞懂JSON及JSON数据解析

文章目录 前言一、XML1、简介2、XML解析方式2.1、SAX解析方式2.2、DOM解析方式2.3、JDOM解析方式2.4、DOM4J解析方式 二、JSON1. 简介及其语法格式2. 解析方式2.1 GSON解析2.1.1 对象转换为JSON字符串2.1.2 JSON字符串转换为对象 2.2 fastjson2.2.1 对象转换为JSON字符串2.2.2 …

c语言解析json数据

我使用的是cJSON: http://sourceforge.net/projects/cjson/ 先看json的数据结构 c中没有对象&#xff0c;所以json数据是采用链表存储的 C代码 typedef struct cJSON { struct cJSON *next,*prev; // 数组 对象数据中用到 struct cJSON *child; // 数…

JSON数据解析(GSON方式)

Android技术学习&#xff0c;更多知识请访问https://www.itkc8.com     JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;采用完全独立于语言的文本格式&#xff0c;为Web应用开发提供了一种理想的数据交换格式。 在上一篇…

android studio json数据解析汇总(备忘)

之前写过一个&#xff0c;但是写不太全&#xff0c;结果自己都看不懂&#xff0c;希望这个以后能看懂吧。 以两个例子说明json数据解析&#xff0c;一个是最简单的&#xff0c;一个是比较难的。 必须知道的&#xff1a;JSONObject和JSONArray JSONObject是在{ }内的。如{&qu…

json解析数据详解

对于服务器端来说&#xff0c;返回给客户端的数据格式一般分为html、xml和json这三种格式&#xff0c;那么本篇随笔将讲解一下json这个知识点&#xff0c;包括如何通过json-lib和gson这两个json解析库来对解析我们的json数据&#xff0c;以及如何在我们的Android客户端解析来自…

Python3 JSON数据解析

JSON是一种比轻量级的数据交换格式。比XML更小、更快、更容易解析。 JSON语法时JavaScript对象表示语法的子集。书写格式为&#xff1a;键:值。用英文逗号为分隔符&#xff0c;{}大括号报错对象&#xff0c;[]中括号报错数组。 python3中使用json模块对JSON进行编码和解码&am…

json数据解析 jsonpath

json是一种文本数据交换格式&#xff0c;不是一种语言 jsonpath是一种语法&#xff0c;用于json数据&#xff0c;类似xpath用于html 1.json.dumps json.loads 需要import json json.dumps——将python数据转化为json数据 实际上就是将python里面的字典转化成json格式的数…

Android开发--Json数据的解析

在执行解析数据之前&#xff0c;需要将一个类库应用到你的程序中&#xff0c;下载的地址是&#xff1a; http://code.google.com/p/google-gson/ 下载解压之后你需要将蓝色标记的文件放入到你的程序之中应用 首先&#xff0c;我们需要知道什么是Json数据: JSON的定义&…

Python3 JSON 数据解析

Python3 中可以使用 json 模块来对 JSON 数据进行编解码&#xff0c;它包含了两个函数&#xff1a; json.dumps(): 对数据进行编码。json.loads(): 对数据进行解码。 示例&#xff1a; # -*- coding:utf-8 -*-import json # 加载json模块data { # 定义一个字典类型a: 1,b:…

json数据解析(json数据解析 前端)

JAVA为什么要返回JSON数据&#xff1f;JAVA为什么要返回JSON数? print( String()); 这样在前台页面就可以通过eval(data。List)获取到。 输出 String()就可以看到讲一个java对象转换成json对象的结果。其他java对象也可以这么来处理。 另外还有就是 List list new ArrayL…

JSON 数据解析的方法

JSON 数据解析 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯&#xff08;包括C、C、C#、Java、JavaScript、Perl、Python等&#xff09;。这…

手动JSON数据解析

1.将json格式的字符串{}转化为JAVA对象 //第一步&#xff1a;获取或创建Json数据String json "{\n" " \"id\":2,\"name\":\"小龙虾\",\n" " \"price\":12.3,\n" " …

【Python爬虫与数据分析】爬虫Json数据解析

目录 一、Json文件数据解析 二、Json数据包解析获取图片资源 三、Json数据包解析获取视频资源 一、Json文件数据解析 json字符串&#xff1a;通常类似python数据类型中的列表和字典的结合&#xff0c;也可能是单独的列表或者字典格式&#xff0c;通常可以通过json模块的函数…

Json格式数据解析

一、简介 XML这种数据格式。XML的特点是功能全面&#xff0c;但标签繁琐&#xff0c;格式复杂。在Web上使用XML现在越来越少&#xff0c;取而代之的是JSON这种数据结构。 JSON是JavaScript Object Notation的缩写&#xff0c;它去除了所有JavaScript执行代码&#xff0c;只保…

JSON解析

#粤嵌星计划&#xff0c;粤嵌我来了# #粤嵌星计划&#xff0c;粤嵌我来了# 1、什么是JSON &#xff08;1&#xff09;JSON&#xff08;Java Script Object Notation&#xff09;是一种轻量级的数据交换语言&#xff0c;以文本字符串为基础&#xff0c;且易于让人阅读。&#x…

内网穿透原理解析

在互联网信息时代的今天&#xff0c;经常会听到外网连接。而与外网所相对应的&#xff0c;是一种内部网络&#xff0c;很多的家庭或者公司利用内部网络来进行多台电脑之间的资源共享&#xff0c;其中所用到的技术就是内网穿透技术&#xff0c;但却有很多的人对这种技术并不了解…

内网穿透原理概要

详细原理的解析 https://blog.csdn.net/xinpz/article/details/82732217 运行原理流程图 什么是内网穿透? 内网穿透是我们在进行网络连接时的一种术语&#xff0c;也叫做NAT穿透&#xff0c;即在计算机是局域网内的时候&#xff0c;外网与内网的计算机的节点进行连接时所需…

内网穿透内容讲解

内网穿透又叫端口映射&#xff0c;用一句最简单的话来讲就是&#xff1a;将你的计算机所连接的私有网络映射到公网上&#xff0c;别人通过你给的域名或ip即可访问你本地的服务。具体的原理可参照百度百科 这么做可以实现各大厂商的云服务器&#xff08;阿里云&#xff0c;腾讯云…

内网穿透你真的了解吗?

前言 内网穿透作为程序员常用的调试手段之一&#xff0c;我们可以通过在个人电脑上运行花生壳或者 frp 等方式&#xff0c;让他人访问我们本地启动的服务&#xff0c;而且这种访问可以不受局域网的限制&#xff0c;当我们使用ngrok,frp等开源框架时&#xff0c;你是否有好奇过…

Ngrok内网穿透

Ngrok一款内网穿透工具&#xff0c;它可以将本地部署的Web应用能够让公网环境直接访问到。ngrok是一个反向代理&#xff0c;通过在公共端点和本地运行的Web服务器之间建立一个安全的通道&#xff0c;实现内网主机的服务可以暴露给外网。所以它提供了一个能够在公网安全访问内网…