jsonpath解析json对象

217 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

解析本地json

首先安装jsonpath

pip install jsonpath

引入json,open方法打开文件。json解析成json格式,使用jsonpath解析json对象,第一种写法的意思是,根目录下returnValue属性中,任意属性下的任意属性下的regionName属性的集合,获取所有的城市名称。 第二种的意思是根目录下任何层级的regionName属性,本案例中结果是一样的,大多情况下是可以满足需要的

import json
import jsonpath
obj = json.load(open('./test.json', 'r', encoding='utf-8'))
regionName=jsonpath.jsonpath(obj,'$.returnValue.*[*].regionName')
print(regionName)
name=jsonpath.jsonpath(obj,'$..regionName')
print(name)

数据如下格式

image.png

获取某个属性下的数据集合

获取根目录下的returnValue属性下的任意属性的集合,得到了一个二维数组

import json
import jsonpath
obj = json.load(open('./test.json', 'r', encoding='utf-8'))
name=jsonpath.jsonpath(obj,'$.returnValue.*')
print(name)

image.png

获取C开头的城市集合 path规则为$.returnValue.C

import json
import jsonpath
obj = json.load(open('./test.json', 'r', encoding='utf-8'))

name=jsonpath.jsonpath(obj,'$.returnValue.C')
print(name)

获取C开头的城市中的最后一个城市对象。这个比较重要,因为我们不确定数据到底有多少个,也不可能去数,(@。lenght-1),数据获取最后一个下标,小括号不可以缺少

import json
import jsonpath
obj = json.load(open('./test.json', 'r', encoding='utf-8'))

name=jsonpath.jsonpath(obj,'$.returnValue.C.[(@.length-1)]')
print(name)

获取C开始城市的前两个城市,[0,1]不是一个区间,而是一个集合,获取前三本就是[0,1,2],另一种写法是前两个[:2],前3个[:3]

import json
import jsonpath
obj = json.load(open('./test.json', 'r', encoding='utf-8'))

name=jsonpath.jsonpath(obj,'$.returnValue.C.[0,1]')
print(name)

获取所有包含a属性的城市。这个a是为了测试,自己随便加的,条件选择前面必须带一个

import json
import jsonpath
obj = json.load(open('./test.json', 'r', encoding='utf-8'))

name=jsonpath.jsonpath(obj,'$.returnValue.*.[?(@.a)]')
print(name)

获取所有id大于3000的城市,和上一个案例一样,

import json
import jsonpath
obj = json.load(open('./test.json', 'r', encoding='utf-8'))

name=jsonpath.jsonpath(obj,'$.returnValue.*.[?(@.id>3000)]')
print(name)

jsonpath还是很友好的,基本上和开发时使用对象的方法类型,对开发的人非常友好