Json
Json是一种轻量级的数据交换格式。Json源自JavaScript语言,易于人类的阅读和编写,同时也易于机器解析和生成,是目前应用最广泛的数据交换格式。获取详细信息可访问官网http://json.org/
Json是跨语言,跨平台的,但只能对Python的基本数据类型做操作,对Python的类就无能为力。JSON格式和Python中的字典非常像。但是,json的数据要求用双引号将字符串引起来,并且不能有多余的逗号。这是因为在别的语言中,双引号引起来的才是字符串,单引号引起来的是字符;Python程序员习惯性的在列表、元组或字典的最后一个元素的后面加个逗号,这在json中是不允许的,需要特别注意。
类型转换
将数据从python转化到json时其数据格式会有变化,见下表:
python | json |
dict | object |
list,tuple | array |
str | string |
int,float | number |
True | true |
False | false |
None | null |
反之,将json对象转化为python对象数据格式也有所变化,见下表:
json | python |
object | dist |
array | list |
string | str |
number(int) | int |
number(float) | float |
true | True |
false | False |
null | None |
使用方法
json模块操作十分简单,多数情况下我们只需要使用以下四种方法就足够了。
方法 | 功能 |
json.dumps(obj) | 将python数据转化成json数据 |
json.loads(s) | 将json数据转化成python数据 |
json.dump(obj,fp) | 将python数据转化并保存为json的数据文件 |
json.load(fp) | 从json格式的文件中读取数据并转化成python格式 |
范例
import json data={ "name":"joe", "age":22, "sex":"male" } trans_data=json.dumps(data) print(trans_data) print(json.loads(trans_data)) >>>{"name": "joe", "sex": "male", "age": 22} >>>{'name': 'joe', 'sex': 'male', 'age': 22}
注意观察每次转化结束后数据是单引号还是双引号。
需要注意的是json模块不支持bytes类型,要先将bytes转换为str格式。
import json data='hello' data2=b'hello' print(json.dumps(data)) print(json.dumps(data2)) >>>"hello" Traceback (most recent call last): File "/home/pyvip/JoePY/home/pyvip/JoePY/test2.py", line 102, in <module> print(json.dumps(data2)) File "/usr/lib/python3.5/json/__init__.py", line 230, in dumps return _default_encoder.encode(obj) File "/usr/lib/python3.5/json/encoder.py", line 198, in encode chunks = self.iterencode(o, _one_shot=True) File "/usr/lib/python3.5/json/encoder.py", line 256, in iterencode return _iterencode(o, 0) File "/usr/lib/python3.5/json/encoder.py", line 179, in default raise TypeError(repr(o) + " is not JSON serializable") TypeError: b'hello' is not JSON serializable
可以看到二进制的数据在转化时会报错。
import json data={ "name":"joe", "age":22, "sex":"male" } json.dump(data,open('data.json','w')) import os print(os.listdir()) >>>'log.txt', 'data.json', '20180725.py', print(json.load(open('data.json','r'))) >>>{'age': 22, 'sex': 'male', 'name': 'joe'}