使用fastjson中的JSONPath处理json数据的方法

 更新时间:2020年04月29日 11:18:02   作者:stone想静静  
这篇文章主要介绍了使用fastjson中的JSONPath处理json数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

介绍

fastjson 1.2.0之后的版本支持JSONPath。,可以在java框架中当作json对象查询语言(OQL)来使用。

常用API

public class JSONPath {   
  // 求值,静态方法
  public static Object eval(Object rootObject, String path);

  // 求值,静态方法,按需计算,性能更好
  public static Object extract(String json, String path);
  
  // 计算Size,Map非空元素个数,对象非空元素个数,Collection的Size,数组的长度。其他无法求值返回-1
  public static int size(Object rootObject, String path);
  
  // 是否包含,path中是否存在对象
  public static boolean contains(Object rootObject, String path) { }
  
  // 是否包含,path中是否存在指定值,如果是集合或者数组,在集合中查找value是否存在
  public static boolean containsValue(Object rootObject, String path, Object value) { }
  
  // 修改制定路径的值,如果修改成功,返回true,否则返回false
  public static boolean set(Object rootObject, String path, Object value) {}

  // 在数组或者集合中添加元素
  public static boolean arrayAdd(Object rootObject, String path, Object... values);
  
  // 获取,Map的KeySet,对象非空属性的名称。数组、Collection等不支持类型返回null。
  public static Set<?> keySet(Object rootObject, String path);
}

使用

准备json内容如下:


取值操作

Object rootName = JSONPath.eval(json,"$.name");
System.out.println(rootName);
Object rootArr = JSONPath.eval(json,"$.arr");
System.out.println(rootArr);

输出:

zpl
[{"name":"zpl0","id":0},{"name":"zpl1","id":1},{"name":"zpl2","id":2},{"name":"zpl3","id":3},{"name":"zpl4","id":4}]

判断操作

// 判断有没有id>2的内容
boolean isExist = JSONPath.contains(json,"$[id>0]");
System.out.println(isExist);
// 判断有没有id>6的内容
isExist = JSONPath.contains(json,"$[id>1]");
System.out.println(isExist);

输出

true
false

size操作

int size = JSONPath.size(json,"$.arr");
System.out.println(size);

输出

5

写到这里,api和表达式不可能一一列举,所谓举一反三,表达式列举如下:

JSONPath 描述
$ 根对象,例如$.name
[num] 数组访问,其中num是数字,可以是负数。例如$[0].leader.departments[-1].name
[num0,num1,num2...] 数组多个元素访问,其中num是数字,可以是负数,返回数组中的多个元素。例如$[0,3,-2,5]
[start:end] 数组范围访问,其中start和end是开始小表和结束下标,可以是负数,返回数组中的多个元素。例如$[0:5]
[start:end :step] 数组范围访问,其中start和end是开始小表和结束下标,可以是负数;step是步长,返回数组中的多个元素。例如$[0:5:2]
[?(key)] 对象属性非空过滤,例如$.departs[?(name)]
[key > 123] 数值类型对象属性比较过滤,例如$.departs[id >= 123],比较操作符支持=,!=,>,>=,<,<=
[key = '123'] 字符串类型对象属性比较过滤,例如$.departs[name = '123'],比较操作符支持=,!=,>,>=,<,<=
[key like 'aa%'] 字符串类型like过滤,例如$.departs[name like 'sz*'],通配符只支持% 支持not like
[key rlike 'regexpr'] 字符串类型正则匹配过滤,例如departs[name like 'aa(.)*'],正则语法为jdk的正则语法,支持not rlike
[key in ('v0', 'v1')] IN过滤, 支持字符串和数值类型 例如: .departs[name in ('wenshao','Yako')] .departs[id not in (101,102)]
[key between 234 and 456] BETWEEN过滤, 支持数值类型,支持not between 例如: .departs[id between 101 and 201].departs[id not between 101 and 201]
length() 或者 size() 数组长度。例如$.values.size() 支持类型java.util.Map和java.util.Collection和数组
keySet() 获取Map的keySet或者对象的非空属性名称。例如$.val.keySet() 支持类型:Map和普通对象不支持:Collection和数组(返回null)
. 属性访问,例如$.name
.. deepScan属性访问,例如$..name

 对象的所有属性,例如$.leader.*

['key'] | 属性访问。例如['name']['key0','key1'] 多个属性访问。例如['id','name']

更多内容可参考github官网:https://github.com/alibaba/fastjson/wiki/JSONPath

到此这篇关于使用fastjson中的JSONPath处理json数据的方法的文章就介绍到这了,更多相关JSONPath处理json数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 阿里云部署SpringBoot项目启动后被杀进程的问题解析

    阿里云部署SpringBoot项目启动后被杀进程的问题解析

    这篇文章主要介绍了阿里云部署SpringBoot项目启动后被杀进程的问题,本文给大家分享问题原因所在及解决步骤,需要的朋友可以参考下
    2023-09-09
  • java编程之基于SpringBoot框架实现扫码登录

    java编程之基于SpringBoot框架实现扫码登录

    本文将介绍基于SpringBoot + Vue + Android实现的扫码登录demo的总体思路,文中附含详细示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-09-09
  • springboot中.yml文件的值无法读取的问题及解决

    springboot中.yml文件的值无法读取的问题及解决

    这篇文章主要介绍了springboot中.yml文件的值无法读取的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 如何在springboot中引入参数校验

    如何在springboot中引入参数校验

    一般我们判断前端传过来的参数,需要对某些值进行判断,是否满足条件,而springboot相关的参数校验注解,可以解决我们这个问题,本文给大家介绍如何在springboot中引入参数校验,感兴趣的朋友一起看看吧
    2023-12-12
  • IDEA Maven源修改为国内阿里云镜像的正确方式

    IDEA Maven源修改为国内阿里云镜像的正确方式

    为了加快 Maven 依赖的下载速度,可以将 Maven 的中央仓库源修改为国内的镜像,比如阿里云镜像,以下是如何在 IntelliJ IDEA 中将 Maven 源修改为阿里云镜像的详细步骤,感兴趣的同学可以参考阅读一下
    2024-09-09
  • springboot+springmvc实现登录拦截

    springboot+springmvc实现登录拦截

    这篇文章主要介绍了springboot+springmvc实现登录拦截,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Elasticsearch中FST与前缀搜索应用实战解析

    Elasticsearch中FST与前缀搜索应用实战解析

    这篇文章主要为大家介绍了Elasticsearch中FST与前缀搜索应用实战解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 一文教会你如何从0到1搭建一个SpringBoot项目

    一文教会你如何从0到1搭建一个SpringBoot项目

    今天刚好学习到SpringBoot,就顺便记录一下吧,下面这篇文章主要给大家介绍了关于如何从0到1搭建一个SpringBoot项目的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • 解决IDEA和CMD中java命令提示错误: 找不到或无法加载主类的问题

    解决IDEA和CMD中java命令提示错误: 找不到或无法加载主类的问题

    这篇文章主要介绍了解决IDEA和CMD中java命令提示错误: 找不到或无法加载主类的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java基础类之ArrayUtils工具类详解

    Java基础类之ArrayUtils工具类详解

    这篇文章主要介绍了java.ArrayDeque类使用方法,java.ArrayDeque类提供了可调整大小的阵列,并实现了Deque接口,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论