在 Python 中使用 JSON 模块处理 JSON 文件
Json 是一种非常通用的数据格式, 在 Python 中使用也非常方便. Python 中有内置的 json
模块, 用来编码和解码 json 数据, 其使用也很简单, 在日常运维工作中非常实用.
目录
Python 中的 JSON 模块
要使用 json 非常简单, 直接 导入该模块就行.
import json
## or simply
import json as js
序列化和反序列化
将 python 数据 (list or dict) 编码成 json 数据的过程通常叫 序列化 (serialization)
, 相反地则叫做 反序列化(deserialization)
. Python 中还有类似的模块 - pickle
和 marshal
, 三者的函数是类似的, 但是后两个是 python 专用的, json 则是通用的.
JSON 数据反序列化
json 模块提供了从 json 文件和 json 数据转换到 Python 数据格式的接口: json.load()
和 json.loads()
. json 到 python 的数据格式转换如下表所示.
JSON | Python |
---|---|
object | dict |
array | array |
string | str |
number(int) | int |
number(real) | float |
true | True |
false | False |
null | None |
json.load()
接受一个 file-like object (open("file")
)作为参数, 而不是文件名, json.loads()
则是接受一个 string 作为输入.
作为开始, 我们先从一个 json 文件中通过 json.load()来读取数据. 下面是一个简单的 json 文件.
{
"name": "Amito",
"email": "me@amito.me"
}
我们在 Python 中导入 json 文件
>>>import json
>>>data=json.load(open("simple.json","r")
>>>print(data)
{'name': 'Amito', 'email': 'me@amito.me'}
如果你有从别处获取的 json 数据或者 json 格式的 string, 可以通过 json.loads()
来转换到 Python 格式, 多出来的 s
可能就是代表了 string
.
>>> json_string="""
{
"name": "Amito",
"email": "me@amito.me",
"note": "from json string"
}
"""
>>>data = json.loads(json_string)
>>>print(data)
{'name': 'Amito', 'email': 'me@amito.me', 'note': 'from json string'}
Python 数据序列化
下面是 Python 对象序列化时和 json 数据格式之间的一个直观的对应.
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, long,float | number |
True | true |
False | false |
None | null |
json.dump()
会将 python 数据序列化到一个文件对象中, json.dumps()
则会序列化到一个 json string 中. 仍旧以上面的 json 文件作为例子
>>>data=json.load(open("simple.json","r"))
>>>type(data)
dict
#### dump to a file object
>>>with open("simple.de.json","w") as out:
json.dump(data, out)
### dumps to a string
>>>json_string = json.dumps(data)
>>>type(str)
str
>>>print(json_string)
{'name': 'Amito', 'email': 'me@amito.me', 'note': 'from json string'}
#### beautify json_string and print json pretty
>>>json_string=json.dumps(data,indent=4)
>>>print(json_string)
{
"name": "Amito",
"email": "me@amito.me",
"note": "from json string"
}
自定义格式数据序列化和反序列化
todo…


