Python中高效使用JSON的四个小窍门
字典和列表是Python的两种数据类型,也是用来处理JSON的完美工具。本文将主要分享以下内容:
·如何载入、编写JSON?
·如何在命令行上优化、校验JSON?
·如何通过使用JMESPath对JSON文档执行高级查询?
1.JSON解码
Python自带一个功能强大、内容丰富的JSON库。可通过以下方式导入:
importjson
解码JSON字符串很简单,直接输入json.loads(…)即可。它可以转换成:
·字典对象
·列表数组
·识别布尔值、整数、浮点数和字符串,在Python中进行正确转换。
·任何null都将被转换为Python的None类型。
以下为json.loads的一个实例:
>>>importjson
>>>jsonstring='{"name":"erik","age":38,"married":true}'
>>>json.loads(jsonstring){'name':'erik','age':38,'married':True}
2.JSON编码
编码JSON也很简单。使用json.dumps(…)把由字典、列表和其他本机类型组成的Python对象转换为字符串:
>>>myjson={'name':'erik','age':38,'married':True}
>>>json.dumps(myjson)'{"name":"erik","age":38,"married":true}'
这其实是一个完全相同的文档,只是被转换成了字符串。所以,要想让JSON文档更易读,可使用缩进选项:
>>>print(json.dumps(myjson,indent=2))
{
"name":"erik",
"age":38,
"married":true
}
3.命令行用法
JSON库也可从命令行使用,以校验、优化JSON:
$echo"{\"name\":\"Monty\",\"age\":45}"|\
python3-mjson.tool
{
"name":"Monty",
"age":45
}
如果你的电脑系统是Mac或Linux,并且能够安装JSON库的话,那么你也可以研究一下jq命令行工具。它除了有便于记忆,可以润色代码等优点外,还有许多其他特点。
jq将在默认情况下优化JSON
4.使用JMESPath搜索JSON
JMESPath是一种JSON查询语言。它能够让你轻松地从JSON文档中获取所需数据。如果你用过JSON,就会觉得获取嵌套值并不难。
例:doc["person"]["age"]将在一个如下所示的文档中获取age的嵌套值:
{
"persons":{
"name":"erik",
"age":"38"
}}
但如果是像下面这样的文档,该如何从这一组人名中提取所有年龄字段呢?
{
"persons":[
{"name":"erik","age":38},
{"name":"john","age":45},
{"name":"rob","age":14}
]}
我们可以简单地写一套关于这些人名的重复指令。虽然很容易,但重复指令运行较慢,会使你的代码复杂化。所以,这就该派JMESPath上场了!
用JMESPath表达式编写代码:
persons[*].age
它将返回一个包含所有年龄的数组:[38,45,14].
假设要筛选列表,只获取名为“erik”的人的年龄。你可以编写一个筛选程序来执行此操作:
persons[?name=='erik'].age
看,多么流畅!
因为JMESPath不属于Python标准库,所以你需要一起安装pip或pipenv。例如,在虚拟环境中使用pip:
$pip3installjmespath
$python3Python3.8.2(default,Jul162020,14:00:26)
>>>importjmespath
>>>j={"people":[{"name":"erik","age":38}]}
>>>jmespath.search("people[*].age",j)
[38]
>>>
现在就去试一试吧!请严格按照交互式教程操作,同时也不要忘了在JMESPath站点上查看示例哦!
以上内容为大家介绍了Python中高效使用JSON的四个小窍门,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/
相关推荐HOT
更多>>Python企业应用的优缺点
Python是软件开发领域一朵诱人的奇葩:人们经常把Python看作是一种起到缝合作用的严格脚本语言,不过却很少有人意识到Python已经足够强大到应用...详情>>
2023-11-11 21:01:20Python 之什么是类,什么是对象?
类即类别、种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体。那么...详情>>
2023-11-11 18:20:34Python 爬虫之pyspider
pyspider是一个支持任务监控、项目管理、多种数据库,具有WebUI的爬虫框架,它采用Python语言编写,分布式架构。详细特性如下:拥有Web脚本编辑...详情>>
2023-11-11 17:49:48python RSA加密算法过程
1,随机选取两个质数p和q2,计算n=pq3,选取一个与Ø(n)互质的小奇数e,Ø(n)=(p-1)(q-1)4,对模Ø(n),计算e的乘法逆元d,即满足(e*d)modØ(n)...详情>>
2023-11-11 17:20:50