百科狗-知识改变命运!
--

Python中高效使用JSON的四个小窍门

乐乐1年前 (2023-11-21)阅读数 14#技术干货
文章标签文档

字典和列表是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},

Python中高效使用JSON的四个小窍门

{"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.baikegou.com/

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)