惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
T
The Exploit Database - CXSecurity.com
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
L
LINUX DO - 热门话题
T
Threat Research - Cisco Blogs
T
Tenable Blog
TaoSecurity Blog
TaoSecurity Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
AI
AI
P
Proofpoint News Feed
A
About on SuperTechFans
P
Privacy International News Feed
月光博客
月光博客
雷峰网
雷峰网
S
Secure Thoughts
博客园 - 叶小钗
博客园 - 聂微东
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Project Zero
Project Zero
The Cloudflare Blog
SecWiki News
SecWiki News
The Hacker News
The Hacker News
V
Vulnerabilities – Threatpost
罗磊的独立博客
A
Arctic Wolf
阮一峰的网络日志
阮一峰的网络日志
Know Your Adversary
Know Your Adversary
酷 壳 – CoolShell
酷 壳 – CoolShell
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
T
Troy Hunt's Blog
The Last Watchdog
The Last Watchdog
Schneier on Security
Schneier on Security
小众软件
小众软件
有赞技术团队
有赞技术团队
博客园 - 司徒正美
T
Tailwind CSS Blog
量子位
C
Cybersecurity and Infrastructure Security Agency CISA
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Security @ Cisco Blogs
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
L
Lohrmann on Cybersecurity

博客园 - 华安

Unity 相机:正交 (Orthographic) vs 透视 (Perspective) - 华安 unity中的button中的onclick控制面板中四个参数的意思分别是什么 - 华安 微信小程序开发中触发 onshow的几种特殊情况 SQL Server备份心得 MYSQL 备份数据库 微信与支付支付功能开发 微信小程序中页面配置下拉刷新 unity中 相机没有视锥效果线框了,如何打开 C# 中的操作JSON类 JObject cookie中的 HttpOnly 、Secure、SameSite 解释 Spring-boot 中基于 IP 的限流和自动封禁 Filter 登录 用 HMAC-SHA256 实现 TwoFA(二重验证)的坑 利用Spring Boot的 filter 结合ConcurrentHashMap 实现“同一IP每分钟最多允许300个404请求,超出后禁用30分钟访问” pixi-filters中的BackdropBlurFilter使用注意事项 PixiJS中的 SplitBitmapText.chars中的每个 BitmapText的x值分析 legend隐藏不想显示的图例 spring-boot HttpServletResponse response.sendRedirect是会跳转到 http而不是https springboot获取post请求参数 Javascript如何判断是触摸屏还是PC端 JavaScript获取鼠标点一个元素,获取鼠标点击的元素内的位置 spring-boot中配置Mongodbd的问题小结 Rest Template中添加 PATCH请求。 CSS实现修改CheckBox样式 SpringBoot+Thyemleaf报错:Error resolving template Template might not exist or might not be accessible div display flex 如何出现横向滚动条
JSONPath表达式
华安 · 2026-04-02 · via 博客园 - 华安

1. 概述

JsonPath 表达式可用于解析 JSON 结构的数据,官方 API 文档:https://github.com/json-path/JsonPath,本文仅为对英文官方文档的翻译。

2. 基础运算符

JsonPath 的根元素总是被称为 $,无论它是一个对象还是数组。

在 JsonPath 表达式中,可以使用点符号,例如:$.store.book[0].title;也可以使用方括号,例如:$['store']['book'][0]['title']。

运算符描述

$

根元素
. 或 [] 获取子元素

如:store.book 或 store["book"]

.. 后代选择器,用来选取所有符合条件的元素
[,] 合并操作符,用于选取若干个元素

如:book[0,1] 或 $..book[0].["category","author"]

[start:end] 切片运算符,索引的起始值为 0 ,左闭右开

如:book[0:2] 或 book[-2:0]

?()

过滤器标识,用于筛选数组,可以将过滤条件写在括号中
@ 表示当前正在被过滤器处理的元素,通常和过滤器配合使用

如:book[?(@.price<10)]

* 通配符。可以用于通配元素的名称或索引

如:book.* 或 book[*]

 也可以和过滤结合使用,作为正则表达式的元素

如:book[?(@.author =~ /.*ees/)]

3. 过滤运算符

过滤器是用于筛选数组的逻辑表达式,一个典型的过滤器是[?(@.age > 18)] ,其中,@ 表示当前正被过滤器处理的元素。通过加入逻辑运算符 && 和 || ,可以创造出更复杂的过滤器。字符串的值必须使用单引号或双引号括起来,如 ([?(@.color == 'blue')] 或[?(@.color == "blue")])。

运算符描述
==

左右相等

注:会对比数据类型,如 1 和 '1'  不相等

!= 左右不相等
< 左侧小于右侧
<= 左侧小于或等于右侧
> 左侧大于右侧
>= 左侧大于或等于右侧 
=~ 左侧符合右侧的正则表达式

如:[?(@.name =~ /foo.*?/i)]

in 左侧存在于右侧

如:[?(@.size in ['S', 'M'])]

nin

subsetof

左侧是右侧的子集

如:[?(@.sizes subsetof ['S', 'M', 'L'])]

anyof

左侧和右侧有交集

如:[?(@.sizes anyof ['M', 'L'])]

noneof

左侧和右侧没有交集

如:[?(@.sizes noneof ['M', 'L'])]

size

左侧和右侧(数字/字符串)一样大

empty

左侧(数字/字符串)为空

4. 函数

可以在路径的末端调用函数。

函数描述输出类型

min()

对于一个数值型数组,找到最小值

双精度

max()

对于一个数值型数组,找到最大值

双精度

avg()

对于一个数值型数组,求平均值

双精度

stddev()

对于一个数值型数组,求标准差

双精度

length()

求数组的长度

整型

sum()

对于一个数值型数组,求总和

JSON数据结构如下所示:

{
  "price": [
      1.0,
      2.0
  ]
}

sum 使用示例:$.price.sum() 

双精度

示例:

假设有这样一个 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
}
JsonPath 表达式结果

$.store.book[*].author

找到 store 元素下的所有书籍,输出他们的作者

$..author

根元素下所有的作者

$.store.*

store 元素下所有的东西,无论是书籍还是自行车

$.store..price

store 元素下的所有东西的价格

$..book[2]

第 3 本书

$..book[-2]

倒数第 2 本书

$..book[0,1]

$..book[:2]

前2本书

$..book[:2]

前2本书(注意:第一本书的索引是0)

$..book[1:2]

第2本书

$..book[-2:]

最后第2本和最后第1本书

$..book[2:]

第3到最后1本书

$..book[?(@.isbn)]

所有书籍中,含有 isbn 属性的书籍

$.store.book[?(@.price < 10)]

所有书籍中,价格低于10的书籍

$..book[?(@.price <= $['expensive'])]

所有数据中,价格没有超过 expensive 的书籍( expansive 的值为10)

$..book[?(@.author =~ /.*REES/i)]

找出符合正则表达式的书籍。

此正则表达式的含义:作者名以REES结尾,REES不区分大小写

$..*

输出根元素下的所有内容

$.store.book.length()

书籍的总数