在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技巧或窍门,请在评论中分享!