字典和列表是Python中的两种数据类型,也是使用JSON的完美工具。本文将主要分享以下内容:如何加载和写入JSON?如何在命令行优化和校验JSON?如何使用JMESPath对JSON文档执行高级查询?1、JSON解码Python自带了一个功能强大、内容丰富的JSON库。可以通过以下方式导入:importjson解码JSON字符串很简单,直接输入json.loads(…)即可。它可以转换为:DictionaryobjectListarray在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默认会优化JSON4。使用JMESPath搜索JSONJMESPath是一种JSON查询语言。它允许您轻松地从JSON文档中获取所需的数据。如果你用过JSON,你会发现获取嵌套值并不困难。示例:doc["person"]["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站点上的示例!【责任编辑:赵宁宁电话:(010)68476606】
