Python中的JSON处理(非常详细)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,不仅易于阅读和编写,还易于机器解析和生成。
JSON 采用完全独立于语言的文本格式,使用了类似 C语言家族的习惯(包括 C、C++、C#、Java、JavaScript、Perl、Python 等)。
JSON 的对象在花括号中,包含多个名称/值对,如:
JSON 的数组在方括号中,包含多个对象,如:
反序列化就是从存储区域(JSON、XML)读取反序列化对象的状态,并重新创建该对象。
Python 提供了 json 模块用于操作 JSON 格式。json 模块序列化与反序列化的过程分别是 encoding 和 decoding:
json.dumps() 带有很多参数,如 indent 参数是缩进的意思,可以使数据存储的格式变得更加优雅,代码为:
indent 参数可使输出的数据被格式化,可读性变得更强,是通过增加一些冗余的空白进行填充的。由于 JSON 主要是作为一种数据通信的格式存在的,而网络通信是很在乎数据大小的,无用的空格会占据通信带宽,因此需要对数据进行压缩。
json.dumps() 的 separators 参数可以起到这种作用。该参数传递的是一个元组,包含分隔对象的字符串,测试程序为:
Python 格式向 JSON 格式转化的对照表为:
JSON 采用完全独立于语言的文本格式,使用了类似 C语言家族的习惯(包括 C、C++、C#、Java、JavaScript、Perl、Python 等)。
JSON书写格式
JSON 的书写格式为:名称/值对,数据用逗号分隔,花括号保存对象,方括号保存数组。值可以为数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null 等。JSON 的对象在花括号中,包含多个名称/值对,如:
{"name":"messi","age":30}
JSON 的数组在方括号中,包含多个对象,如:
{
"player": [
{ "name":"messi" , "age":30 },
{ "name":"xavi" , "age":36 },
{ "name":"iniesta" , "age":33 }
]
}
Python JSON编码
序列化(Serialization)就是将对象的状态信息转换为可以存储或可以通过网络传输的过程,传输的格式可以为 JSON、XML 等。反序列化就是从存储区域(JSON、XML)读取反序列化对象的状态,并重新创建该对象。
Python 提供了 json 模块用于操作 JSON 格式。json 模块序列化与反序列化的过程分别是 encoding 和 decoding:
- encoding(编码):把一个 Python 对象编码为 JSON 字符串。
- decoding(解码):把 JSON 格式的字符串编码为 Python 对象。
1) json.dumps()
Python 的 json 模块通过 json.dumps() 将 Python 对象编码为 JSON 字符串,代码为:
>>> import json
>>> data = {'a':1,'b':2}
>>> type(data)
<class 'dict'>
>>> encode_json = json.dumps(data)
>>> type(encode_json)
<class 'str'>
>>> print(encode_json)
{"a": 1, "b": 2}
json.dumps() 带有很多参数,如 indent 参数是缩进的意思,可以使数据存储的格式变得更加优雅,代码为:
>>> data = {'a':1,'b':2}
>>> encode_json = json.dumps(data,indent=4)
>>> print(encode_json)
{
"a": 1,
"b": 2
}
indent 参数可使输出的数据被格式化,可读性变得更强,是通过增加一些冗余的空白进行填充的。由于 JSON 主要是作为一种数据通信的格式存在的,而网络通信是很在乎数据大小的,无用的空格会占据通信带宽,因此需要对数据进行压缩。
json.dumps() 的 separators 参数可以起到这种作用。该参数传递的是一个元组,包含分隔对象的字符串,测试程序为:
>>> import json
>>> data = {'a':1,'b':2}
>>> len(repr(data))
16
>>> len(json.dumps(data,indent=4))
26
>>> len(json.dumps(data,separators=(',',':')))
13
通过该测试程序可知,使用 separators 参数的 JSON 格式的数据最短。Python 格式向 JSON 格式转化的对照表为:
| Python | JSON |
|---|---|
| dict | object |
| list, tuple | array |
| str | string |
| int, float | number |
| True | true |
| False | false |
| None | null |
2) json.dump()
Python 的 json 模块通过 json.dump() 将 Python 的数据对象转换为 JSON 格式并写入文件,程序为:
>>> import json
>>> data = {'a':1,'b':2}
>>> with open('dump.json','w') as f:
... json.dump(data,f)
...
该程序会把 Python 字典中的 data 内容转换为 JSON 格式并写入当前目录的 dump.json 文件。Python JSON解码
Python 的 json 模块通过 json.loads() 可解码 JSON 格式并返回 Python 字段的数据格式,程序为:
>>> import json
>>> org_json= '{"name":"messi", "type":[{"name":"xavi", "age":["1","2"]}]}'
>>> decode_json = json.loads(org_json)
>>> print(decode_json)
{'type': {'age': ['1', '2'], 'name': 'xavi'}, 'name': 'messi'}
>>> print(decode_json["name"])
messi
>>> print(decode_json["type"])
{'age': ['1', '2'], 'name': 'xavi'}
>>> print(decode_json["type"]["name"])
xavi
JSON 格式转换为 Python 格式的对照表为:| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | unicode |
| number (int) | int |
| number (real) | float |
| true | True |
| false | False |
| null | None |
1) json.load()
Python 的 json 模块通过 json.load() 可从 JSON 格式文件中读取数据,并将 JSON 格式的字符串转换为 Python 格式,程序为:
>>> import json
>>> with open('dump.json','r') as f:
... data = json.load(f)
...
>>> print(data)
{'a': 1, 'b': 2}
>>> type(data)
<class 'dict'>
该程序会把当前目录下 dump.json 文件中的 JSON 格式数据转换为 Python 的字典格式。
ICP备案:
公安联网备案: