跳至正文

JSON Path Tester

测试 JSONPath 表达式并从 JSON 数据中提取所需值的工具。API 响应解析和数据分析的必备工具!

Result will appear here...

Common Patterns

Root
$
Root object
All Books
$.store.book[*]
All books in store
First Book
$.store.book[0]
First book
Last Book
$.store.book[-1]
Last book
Book Titles
$.store.book[*].title
All book titles
Books < $10
$.store.book[?(@.price < 10)]
Books cheaper than $10
Books with ISBN
$.store.book[?(@.isbn)]
Books with ISBN
All Prices
$.store..price
All prices (recursive)

Syntax Guide:

  • $ - Root object
  • @ - Current object
  • . or [] - Child operator
  • .. - Recursive descent
  • * - Wildcard
  • [start:end] - Array slice
  • [?(<expr>)] - Filter expression

什么是 JSONPath?

JSONPath 是一种用于查询 JSON 数据结构中值的表达式语言。就像 XPath 对于 XML 一样,JSONPath 允许您从 JSON 中提取特定数据。

主要语法

基本运算符

运算符说明示例
$根对象$
@当前对象(过滤器内部)@.price
.[]子元素$.store.book
..递归搜索$..price
*通配符$.store.*
[n]数组索引$.store.book[0]
[start:end]数组切片$.store.book[0:2]
[?(<expr>)]过滤器表达式$..book[?(@.price < 10)]

数组索引

// 第一个元素
$.store.book[0]

// 最后一个元素
$.store.book[-1]

// 范围(从 0 到索引 2 之前)
$.store.book[0:2]

// 所有元素
$.store.book[*]

过滤器表达式

// 价格低于 10 的书籍
$.store.book[?(@.price < 10)]

// 有 ISBN 的书籍
$.store.book[?(@.isbn)]

// 类别为 fiction 的书籍
$.store.book[?(@.category === 'fiction')]

// 标题中包含特定单词的书籍
$.store.book[?(@.title.includes('Moby'))]

实际使用示例

从 API 响应中提取数据

// API 响应
{
"users": [
{ "id": 1, "name": "John", "active": true },
{ "id": 2, "name": "Jane", "active": false },
{ "id": 3, "name": "Bob", "active": true }
]
}

// 仅提取活跃用户
$.users[?(@.active === true)]

// 所有用户名
$.users[*].name

浏览嵌套数据

// 复杂的 JSON
{
"company": {
"departments": [
{
"name": "Engineering",
"employees": [
{ "name": "Alice", "salary": 100000 },
{ "name": "Bob", "salary": 90000 }
]
},
{
"name": "Sales",
"employees": [
{ "name": "Charlie", "salary": 80000 }
]
}
]
}
}

// 所有员工的工资
$..employees[*].salary

// 工资 >= 90000 的员工
$..employees[?(@.salary >= 90000)]

处理数组数据

// 电商数据
{
"products": [
{ "name": "Laptop", "price": 1000, "stock": 5 },
{ "name": "Mouse", "price": 20, "stock": 0 },
{ "name": "Keyboard", "price": 50, "stock": 10 }
]
}

// 有库存的产品
$.products[?(@.stock > 0)]

// 价格范围(20 ~ 100)
$.products[?(@.price >= 20 && @.price <= 100)]

使用场景

1. API 测试和调试

// 从 GraphQL 响应中提取错误消息
$.errors[*].message

// REST API 分页数据
$.data.items[*]

2. 数据分析

// 按特定条件过滤数据
$..transactions[?(@.amount > 1000)]

// 收集统计数据
$..metrics[*].value

3. 配置文件解析

// 提取特定环境配置
$.environments[?(@.name === 'production')]

// 已启用的功能标志
$.features[?(@.enabled === true)].name

4. 日志分析

// 仅过滤错误日志
$.logs[?(@.level === 'error')]

// 特定时间范围内的日志
$.logs[?(@.timestamp > 1234567890)]

比较运算符

JSONPath 过滤器中可用的运算符:

  • === - 等于
  • !== - 不等于
  • < - 小于
  • <= - 小于或等于
  • > - 大于
  • >= - 大于或等于
  • && - AND
  • || - OR

使用技巧

1. 分步测试

将复杂路径分解测试:

// 步骤 1: $.store
// 步骤 2: $.store.book
// 步骤 3: $.store.book[*]
// 步骤 4: $.store.book[*].title

2. 使用递归搜索

当结构未知时使用 ..:

// 查找所有 price 字段
$..price

3. 组合过滤器

组合多个条件:

$..book[?(@.price < 10 && @.category === 'fiction')]

注意事项

  • JSONPath 表达式区分大小写
  • 在过滤器表达式内部使用 @ 来引用当前对象
  • 数组切片的工作方式类似于 Python(包含开始,不包含结束)
  • 不同实现之间的语法可能略有不同

相关工具

其他资源