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

推荐订阅源

L
LangChain Blog
有赞技术团队
有赞技术团队
博客园_首页
IT之家
IT之家
爱范儿
爱范儿
量子位
小众软件
小众软件
Jina AI
Jina AI
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
The Cloudflare Blog
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
雷峰网
雷峰网
V
Visual Studio Blog
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
美团技术团队
Last Week in AI
Last Week in AI
S
SegmentFault 最新的问题

博客园 - 华安

CSS中元素的display显示方式有多种,隐藏、块级、内联、内联-块级 SQl Server 中的 go 是什么作用 CSS中 display:flex的align-items: stretch; 移动端浏览器(尤其是 iOS Safari)的橡皮筋回弹效果(Overscroll / Bounce Effect) 手机端浏览器上ES6中的Fetch回调执行 window.open没效果 用Flex实现兼容性好的全屏布局 在 VS Code 中使用 C# Dev Kit 和 Unity Tools 调试 Unity 2022 Unity 可编程物件(ScriptableObject) 微信小程序中的 联系客服 最基本的使用方法 wx.requestSubscribeMessage(Object object) 和 wx.requestSubscribeDeviceMessage(Object object) 这两个有什么区别 微信小程序中 wx.hideLoading() 后调用 wx.showToast()的问题 Windows 中启动 Nginx的常用命令 CSS进阶技巧:字体渐变、描边、倒影与渐变色描边全解析 netCore 中各DLL引用了 SkiaSharp.dll的问题 unity中预制体解包 在 Unity 中,Time.timeScale实现游戏暂停加速等 微信小程序中关联微信支付 unity中的 Navigation AI使用 C#中TaskCompletionSource(简称 TCS)学习 Unity 编辑器 中,快捷键 Ctrl + Shift + F 的功能 unity中按下 F键,让物体聚焦 微信中进入定页面的,判断时通过扫二维码进入的,还是点小程序名称进入的 MYSQL中从JSON字符串中提取指定的值 Unity2022中创建动画 Animation(旧方法) Unity 中区别,public 和 [SerializeField] Unity中 onCollisionEnter2D与OnTriggerEnter2D 区别 asp.netCore中给动态请求路径加客户端缓存 netCore中获取客户端真实的IP引起的思考 Unity 相机:正交 (Orthographic) vs 透视 (Perspective) unity中的button中的onclick控制面板中四个参数的意思分别是什么
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()

书籍的总数