6.0 KiB
python 101:JSON 使用简介
原文:https://www.blog.pythonlibrary.org/2020/09/15/python-101-an-intro-to-working-with-json/
JavaScript Object Notation,通常被称为 JSON,是一种受 JavaScript object literal 语法启发的轻量级数据交换格式。JSON 对于人类来说很容易读写。也便于计算机解析生成。JSON 用于存储和交换数据,与 XML 的使用方式非常相似。
Python 有一个名为json的内置库,可以用来创建、编辑和解析 JSON。您可以在此阅读关于该图书馆的所有信息:
了解 JSON 的样子可能会有所帮助。这里有一个来自 https://json.org 的 JSON 的例子:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
从 Python 的角度来看,这个 JSON 是一个嵌套的 Python 字典。你会发现 JSON 总是被翻译成某种原生 Python 数据类型。在本文中,您将了解以下内容:
- 编码 JSON 字符串
- 解码 JSON 字符串
- 将 JSON 保存到磁盘
- 从磁盘加载 JSON
- 使用
json.tool验证 JSON
JSON 是一种非常流行的格式,经常在 web 应用程序中使用。您会发现,知道如何使用 Python 与 JSON 交互在您自己的工作中很有用。
我们开始吧!
编码 JSON 字符串
Python 的json模块使用dumps()将对象序列化为字符串。dumps()中的“s”代表“弦”。通过在一些代码中使用json模块,可以更容易地看出这是如何工作的:
>>> import json
>>> j = {"menu": {
... "id": "file",
... "value": "File",
... "popup": {
... "menuitem": [
... {"value": "New", "onclick": "CreateNewDoc()"},
... {"value": "Open", "onclick": "OpenDoc()"},
... {"value": "Close", "onclick": "CloseDoc()"}
... ]
... }
... }}
>>> json.dumps(j)
'{"menu": {"id": "file", "value": "File", "popup": {"menuitem": [{"value": "New", '
'"onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, '
'{"value": "Close", "onclick": "CloseDoc()"}]}}}'
这里使用了json.dumps(),它将 Python 字典转换成 JSON 字符串。该示例的输出被修改为换行打印。否则字符串将全部在一行上。
现在您已经准备好学习如何将一个对象写入磁盘了!
将 JSON 保存到磁盘
Python 的json模块使用dump()函数将对象序列化或编码为 JSON 格式的流,成为类似文件的对象。Python 中的类文件对象是指使用 Python 的io模块创建的文件处理程序或对象。
继续创建一个名为create_json_file.py的文件,并向其中添加以下代码:
# create_json_file.py
import json
def create_json_file(path, obj):
with open(path, 'w') as fh:
json.dump(obj, fh)
if __name__ == '__main__':
j = {"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
create_json_file('test.json', j)
在本例中,您使用了json.dump(),它用于写入文件或类似文件的对象。它将写入文件处理程序fh。
现在您可以学习如何解码 JSON 字符串了!
解码 JSON 字符串
JSON 字符串的解码或反序列化是通过loads()方法完成的。loads()是dumps()的配套功能。下面是它的用法示例:
>>> import json
>>> j_str = """{"menu": {
... "id": "file",
... "value": "File",
... "popup": {
... "menuitem": [
... {"value": "New", "onclick": "CreateNewDoc()"},
... {"value": "Open", "onclick": "OpenDoc()"},
... {"value": "Close", "onclick": "CloseDoc()"}
... ]
... }
... }}
... """
>>> j_obj = json.loads(j_str)
>>> type(j_obj)
<class 'dict'>
这里,您将前面的 JSON 代码重新创建为 Python 多行字符串。然后使用json.loads()加载 JSON 字符串,将它转换成 Python 对象。在这种情况下,它将 JSON 转换为 Python 字典。
现在您已经准备好学习如何从文件加载 JSON 了!
从磁盘加载 JSON
使用json.load()从文件加载 JSON。这里有一个例子:
# load_json_file.py
import json
def load_json_file(path):
with open(path) as fh:
j_obj = json.load(fh)
print(type(j_obj))
if __name__ == '__main__':
load_json_file('example.json')
在这段代码中,您像以前看到的那样打开传入的文件。然后您将文件处理程序fh传递给json.load(),这将把 JSON 转换成 Python 对象。
还可以使用 Python 的json模块来验证 JSON。接下来你会知道如何去做。
使用json.tool验证 JSON
Python 的json模块提供了一个工具,您可以在命令行上运行该工具来检查 JSON 是否具有正确的语法。这里有几个例子:
$ echo '{1.2:3.4}' | python -m json.tool
Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
$ echo '{"1.2":3.4}' | python -m json.tool
{
"1.2": 3.4
}
第一个调用将字符串'{1.2:3.4}'传递给json.tool,这告诉您 JSON 代码有问题。第二个示例向您展示了如何解决这个问题。当固定字符串被传递给json.tool时,它会“漂亮地打印”出 JSON,而不是发出一个错误。
包扎
在处理 web APIs 和 web 框架时,经常使用 JSON 格式。Python 语言为您提供了一个很好的工具,可以用来将 JSON 转换成 Python 对象,然后在json库中再转换回来。
在本章中,您学习了以下内容:
- 编码 JSON 字符串
- 解码 JSON 字符串
- 将 JSON 保存到磁盘
- 从磁盘加载 JSON
- 使用
json.tool验证 JSON
现在,您有了另一个可以使用 Python 的有用工具。只要稍加练习,您很快就能使用 JSON 了!