通过python在json中查找数据的方法

2025-04-28 17:48:46 by wst

python小技巧

怎么在json中查找自己想要的数据呢,正好有个包可以实现,下面我们具体说明jsonpath的用法。

安装方法:pip install jsonpath

JSONPath 是一种用于提取 JSON 数据中特定字段的查询语言,其基本语法与 XPath 类似。以下是 JSONPath 的一些基本语法示例: 

1.获取根节点

$ 表示 JSON 数据的根节点。

{
  "store": {
    "book": [
      { "category": "reference", "price": 19.95 },
      { "category": "fiction", "price": 5.99 }
    ]
  }
}
import json
import jsonpath

data = json.loads(json_str)
result = jsonpath.jsonpath(data, '$.store')
print(result)

输出:

[{'book': [{'category': 'reference', 'price': 19.95}, {'category': 'fiction', 'price': 5.99}]}]

2. 获取字段值

使用 .[] 操作符来获取对象的字段值。

示例:

import json
import jsonpath

data = json.loads(json_str)
result = jsonpath.jsonpath(data, '$.store.book')
print(result)

输出:

[{'category': 'reference', 'price': 19.95}, {'category': 'fiction', 'price': 5.99}]

3. 获取数组元素

使用 [index] 来获取数组中的元素,索引从 0 开始。也可以使用通配符 [*] 来获取数组中的所有元素。

示例:

import json
import jsonpath

data = json.loads(json_str)
result = jsonpath.jsonpath(data, '$.store.book[0]')
print(result)

输出:

[{'category': 'reference', 'price': 19.95}]

获取所有元素:

import json
import jsonpath

data = json.loads(json_str)
result = jsonpath.jsonpath(data, '$.store.book[*]')
print(result)

输出:

[{'category': 'reference', 'price': 19.95}, {'category': 'fiction', 'price': 5.99}]

4. 递归查找

使用 .. 进行递归查找,查找所有匹配的字段,无论其在 JSON 数据中的位置如何。

示例:

import json
import jsonpath

data = json.loads(json_str)
result = jsonpath.jsonpath(data, '$..category')
print(result)

输出:

['reference', 'fiction']

5. 过滤条件

使用 [?(@.field == value)] 来对数组元素进行过滤,其中 @ 表示当前元素。

示例:

import json
import jsonpath

data = json.loads(json_str)
result = jsonpath.jsonpath(data, '$.store.book[?(@.category == "reference")]')
print(result)

输出:

[{'category': 'reference', 'price': 19.95}]

6. 组合查询

可以组合多个条件来获取更精确的结果。

示例:

import json
import jsonpath

data = json.loads(json_str)
result = jsonpath.jsonpath(data, '$.store.book[?(@.price < 10 && @.category == "fiction")]')
print(result)

输出:

[{'category': 'fiction', 'price': 5.99}]

 


Comments(0) Add Your Comment

Not Comment!