JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它由独立的成对的名称–值对(key–value pairs)组成,并经常用于 web 开发、数据交换和配置文件。在 Python 中,我们可以通过 json 模块来方便地处理 JSON 数据。本文为你提供了一个详尽的 Python 处理 JSON 数据的指南,说明了 json 模块提供的多种方法以及如何使用这些方法。
1. Python 与 JSON 的交互
在 Python 中,我们可以通过 json 模块来方便地处理 JSON 数据。这个模块提供了 Serializer 和 Deserializer(解码器和编码器)两种特殊功能,从而能够将 Python 数据类型转换为 JSON 数据格式和 vice versa。
2. JSON 的数据结构
JSON 是一种有序和嵌套的数据结构。JSON 数据可以采用三种主要类型的数据结构:标量、对象、和数组。
(1)标量数据类型
JSON 数据可以是布尔类型、数值类型和字符串类型。简单的例子就是 `true`、`false`、`null`、`123`、`456.78`、`"hello"`等。
(2)对象数据类型(associative arrays)
JSON 数据可以表示为一个链表式的名称与值对(key–value pairs),我们成为对象。每一个名称-值对是一条记录,其中名称(key)是用引号表示的字符串,值(value)是 JSON 数据类型。在 Python 中,这类数据可以使用字典来表示。
(3)数组数据类型(arrays)
JSON 数据还可以是一组具有序列的值组成的集合,我们成为数组(array)。在 Python 中,数组可以使用 list 来表示。
3. Python JSON 对象
在 Python 中,如果要使用 JSON 进行数据交换,数据类型的不同还要适应其在网络请求中的采用,而这就推到了 `dict` 变成了 Python JSON 类的适用变量的地方。例如:
```python
import json
person = {"name": "John Doe","age": 28,"city":"New York"}
print(type(person)) # dict
result = json.dumps(person) # dict --> json data
print(type(result)) # str
result = json.loads(result) # json data --> dict
print(type(result)) # dict
print(result) # outputs: {"name": "John Doe","age": 28,"city":"New York"}
```
此代码块中第一行中创建一个不同类型的数据("name": "John Doe", "age": 28, "city":"New York")并将其形成一个 Python `dict`. `json.dumps()`第三行用于把 `dict` 转为 `json` 字符串 `result`, `json.loads()`第五行用来将 `json` 字符串 `result`转为原始 `dict`.
4. Python JSON 数组
处理 JSON 数组中的数据时,我们需要创建一个列表(list),因为 JSON 中的数组被视为对象数组。例如:
```python
import json
person = [{"name": "John Doe","age": 28,"city":"New York"},{"name": "Jane Doe","age": 22,"city":"California"},{"name": "Doe Son","age": 18,"city":"Virginia"}]
print(type(person)) # list
result = json.dumps(person)
print(type(result)) # str
result = json.loads(result)
print(type(result)) # list
print(result) # output: [{"name": "John Doe","age": 28,"city":"New York"},{"name": "Jane Doe","age": 22,"city":"California"},{"name": "Doe Son","age": 18,"city":"Virginia"}]
```
在此代码片段中,第三行展示了创建一个包含多个对象数据的列表 `person`,然后调用 `json.dumps()`和 `json.loads()`将这个列表转换成 JSON 格式字符串,再转换回列表。
5. Python JSON 函数介绍
在 JSON 数据处理中,JSON 模块还提供了多种能够完成特定任务的方法。有了这些方法,Python 的 JSON 编码和解码变得非常容易。以下是一些最常用的这些方法。
(1)`json.dumps(data)`:这个函数用于将Python的任何类型数据(集合/数组,类,异常等)转化为 JSON 格式的字符串。
```python
data = {'name':'John', 'age': 28, 'city':'New York'}
data_json = json.dumps(data)
print(type(data_json), data_json) # <class 'str'> {"name": "John", "age": 28, "city": "New York"}
```
(2)`json.loads(text)`:这个函数把一个 JSON 格式字符串转化为相应的 Python 数据对象(集合,类等)。
```python
text = '{"name": "John", "age": 28, "city": "New York"}'
data_back = json.loads(text)
print(type(data_back), data_back) # <class 'dict'> {'name': 'John', 'age': 28, 'city': 'New York'}
```
(3)`json.dump(obj, fp, separators, encoded, ignore_nanes=False, sort_keys=False)`:将Python object转换成 JSON 的一行形式,但不换行,并存储在 I/O object。
```python
# with open('person.json', 'w') as f:
# json.dump(person, f)
data = {'name': 'John', 'age': 28, 'city':'New York'}
fp = open("sample.json", "w")
json.dump(data, fp)
fp.close()
```
(4)`json.dumps(obj, filename)`:类似 json.dump,不过实际保存到文件里,后面的貌似是电文的时间传递?。
总结
Python JSON 处理比其他许多编程语言具有显著的优势。通过使用 python 内置的 JSON 模块,我们可以轻松地处理 JSON 数据。这篇文章提供了如何在 Python 中序列化和反序列化 JSON 数据的简明教程,并深入探讨了其主要数据结构,函数,以及那些特别有用的函数。希望这个系列可以帮助你更轻松地学习和利用 Python JSON 处理。如果你有任何问题,请随时在下面留言。