字典和列表是Python的两种数据类型,也是用来处理JSON的完美工具。本文将主要分享以下内容:

·如何载入、编写JSON?

·如何在命令行上优化、校验JSON?

·如何通过使用JMESPath对JSON文档执行高级查询?

1. JSON解码

  Python自带一个功能强大、内容丰富的JSON库。可通过以下方式导入:

import json

  解码JSON字符串很简单,直接输入 json.loads(…) 即可。它可以转换成:

·字典对象

·列表数组

·识别布尔值、整数、浮点数和字符串,在Python中进行正确转换。

·任何 null 都将被转换为Python的None类型。

  以下为json.loads 的一个实例:

>>> import json   >>> jsonstring = '{"name": "erik","age": 38, "married": true}'   >>> json.loads(jsonstring){'name': 'erik', 'age': 38, 'married': True}
>>> import json   >>> jsonstring = '{"name": "erik","age": 38, "married": true}'   >>> json.loads(jsonstring){'name': 'erik', 'age': 38, 'married': True}
>>> import json   >>> 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}'
>>> 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   }
>>> print(json.dumps(myjson, indent=2))   {    "name": "erik",    "age": 38,    "married": true   }
>>> print(json.dumps(myjson, indent=2))   {    "name": "erik",    "age": 38,    "married": true   }
>>> print(json.dumps(myjson, indent=2))   {    "name": "erik",    "age": 38,    "married": true   }
>>> print(json.dumps(myjson, indent=2))   {    "name": "erik",    "age": 38,    "married": true   }
>>> print(json.dumps(myjson, indent=2))   {    "name": "erik",    "age": 38,    "married": true   }

3. 命令行用法

  JSON库也可从命令行使用,以校验、优化JSON:

$ echo "{ "name": "Monty", "age":45 }" |   python3 -m json.tool   {    "name": "Monty",    "age": 45   }
$ echo "{ "name": "Monty", "age":45 }" |   python3 -m json.tool   {    "name": "Monty",    "age": 45   }
$ echo "{ "name": "Monty", "age":45 }" |   python3 -m json.tool   {    "name": "Monty",    "age": 45   }
$ echo "{ "name": "Monty", "age":45 }" |   python3 -m json.tool   {    "name": "Monty",    "age": 45   }
$ echo "{ "name": "Monty", "age":45 }" |   python3 -m json.tool   {    "name": "Monty",    "age": 45   }
$ echo "{ "name": "Monty", "age":45 }" |   python3 -m json.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"    }}
{    "persons": {    "name": "erik",    "age": "38"    }}
{    "persons": {    "name": "erik",    "age": "38"    }}
{    "persons": {    "name": "erik",    "age": "38"    }}

  但如果是像下面这样的文档,该如何从这一组人名中提取所有年龄字段呢?

{    "persons": [    { "name": "erik","age": 38 },    { "name": "john","age": 45 },    { "name": "rob","age": 14 }    ]}
{    "persons": [    { "name": "erik","age": 38 },    { "name": "john","age": 45 },    { "name": "rob","age": 14 }    ]}
{    "persons": [    { "name": "erik","age": 38 },    { "name": "john","age": 45 },    { "name": "rob","age": 14 }    ]}
{    "persons": [    { "name": "erik","age": 38 },    { "name": "john","age": 45 },    { "name": "rob","age": 14 }    ]}
{    "persons": [    { "name": "erik","age": 38 },    { "name": "john","age": 45 },    { "name": "rob","age": 14 }    ]}
{    "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:

$ pip3 install jmespath   $ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)   >>> import jmespath   >>> j = { "people": [{ "name": "erik","age": 38 }] }   >>> jmespath.search("people[*].age", j)   [38]   >>>
$ pip3 install jmespath   $ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)   >>> import jmespath   >>> j = { "people": [{ "name": "erik","age": 38 }] }   >>> jmespath.search("people[*].age", j)   [38]   >>>
$ pip3 install jmespath   $ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)   >>> import jmespath   >>> j = { "people": [{ "name": "erik","age": 38 }] }   >>> jmespath.search("people[*].age", j)   [38]   >>>
$ pip3 install jmespath   $ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)   >>> import jmespath   >>> j = { "people": [{ "name": "erik","age": 38 }] }   >>> jmespath.search("people[*].age", j)   [38]   >>>
$ pip3 install jmespath   $ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)   >>> import jmespath   >>> j = { "people": [{ "name": "erik","age": 38 }] }   >>> jmespath.search("people[*].age", j)   [38]   >>>
$ pip3 install jmespath   $ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)   >>> import jmespath   >>> j = { "people": [{ "name": "erik","age": 38 }] }   >>> jmespath.search("people[*].age", j)   [38]   >>>
$ pip3 install jmespath   $ python3Python 3.8.2 (default, Jul 16 2020, 14:00:26)   >>> import jmespath   >>> j = { "people": [{ "name": "erik","age": 38 }] }   >>> jmespath.search("people[*].age", j)   [38]   >>>

  现在就去试一试吧!请严格按照交互式教程操作,同时也不要忘了在JMESPath站点上查看示例哦!

python 获取json中最大值_Python中高效使用JSON的四个小窍门相关推荐

  1. python获取当前utc时间_python中通过datetime获取UTC时间ISO格式

    一个热点统计需求,需要限定一个时间范围,计算出该范围内的热点事件,相关数据则以UTC标准时间的ISO时间格式存在mongodb中,和服务器设置的时区UTC+8并不一致. 为了解决这个问题,直觉反应是在 ...

  2. python获取机器唯一标识_python中uuid来生成机器唯一标识

    摘要: 我们可以使用uuid1的后16位来标识一个机器. # use machine specific uuid, last 16 char will be the same if machine i ...

  3. python编程、abc最大值_Python中abc

    import abc 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化 class Animal(metaclass=abc.ABCMeta): # 统一所有子类 ...

  4. python获取用户输入中文_python中的用户输入

    一个选项(ha!)将选项的结构存储在变量中.在 例如,(在您的脑海中)将"菜单"定义为包含以下值的子集的dict:"问题"-这是显示菜单时要问的问题-" ...

  5. python 获取数据库字段类型_python中如何读取数据库数据类型

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. python的json格式输出_python中json格式数据输出实现方式

    python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...

  7. python中通过什么函数来获取键盘的输入_Python中使用 input 函数来获取输入

    所谓输入,就是用代码获取用户通过键盘输入的信息. 例如:去银行取钱,在 ATM 上输入密码. 在 Python 中,如果要获取用户在键盘上的输入信息,需要使用到input()函数. 函数input() ...

  8. python获取子进程返回值_Python 从subprocess运行的子进程中实时获取输出的例子 Python如何抓取程序的输出?...

    关于python中用subprocess调用exe子进程的问题不懂我的人有什么资格对我指指点点,不了解我的人凭什么对我说三道四的. python杀死子进程后继续执行后面程序 程序a(python写成) ...

  9. python 打印当前行号_python中获取当前位置所在的行号和函数名(转)

    http://www.vimer.cn/2010/12/%E5%9C%A8python%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E4%BD%8D%E7 ...

最新文章

  1. 做不了爱人,我们做什么?
  2. python能做游戏吗-python制作小游戏(一)
  3. 4kyu Path Finder #2: shortest path
  4. 浅浅地谈一下随机算法【poj2454】【poj3318】
  5. 在路上,继续就好了。。。。
  6. JAVA Spring 事物 ( 已转账为例 ) 基于 AOP 注解
  7. 增强型的for循环linkedlist_LinkedList的复习
  8. java中exception_Java中的异常 Exceptions
  9. 分治法 --- 大整数的乘法
  10. Keil MDK编译后生产的.axf文件用什么打开?
  11. markdown转html格式
  12. Android-使用StaticLayout实现icon跟随TextView末尾效果
  13. windows已经阻止此应用 如何解决(非专业版系统)
  14. Mac如何查看隐藏文件夹|隐藏文件夹的显示与隐藏
  15. 样本标准差个除以n-1与总体标准差除以n 数学意义是什么?
  16. git恢复误删代码或文件
  17. 用bat批量启动多个软件/程序
  18. 梦回校园,一个很精彩的梦(精彩做梦,今天记录1个到博客,其它都发在微信朋友圈和QQ空间了)
  19. 2013 11 24电脑操作
  20. java随堂练习01,算术运算符的使用。

热门文章

  1. 浮动元素具有行内块元素特点(HTML、CSS)
  2. Halcon内参外参畸变矫正
  3. C#笔记09 结构、枚举、异常、泛型、操作符重载、dll、垃圾回收与资源清理、XML注释
  4. 31. Next Permutation (java 字典序生成下一个排列)
  5. js 能实现监听F5页面刷新子iframe 而父页面不刷新
  6. java扩展数组_Java数组扩展
  7. (三.0)通过FPGA实现以太网通信原理及理解
  8. suse linux11下的多网口位置确定
  9. VO中的Long类型数据通过注解的方式直接转换为String,防止数据失真
  10. ConcurrentHashMap与HashTable的区别