在Python中有效使用JSON的4个技巧

在Python中使用JSON轻而易举,这将使您立即入门。

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}

2.编码JSON


反之亦然。使用 json.dumps(…) (“转储为字符串”的缩写)将包含字典,列表和其他本机类型的Python对象转换为字符串:

>>> myjson = {'name': 'erik', 'age': 38, 'married': True}
>>> json.dumps(myjson)
'{"name": "erik", "age": 38, "married": true}'

这是完全相同的文档,转换回字符串!如果要使JSON文档更易被人类阅读,请使用indent选项:

>>> 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
}

jq默认会漂亮地打印您的JSON

4.使用JMESPath搜索JSON

JMESPath是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

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

您现在就可以开始尝试了!

如果您还有其他JSON技巧或窍门,请在评论中分享!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值