在web应用当中常用json(javascript object notation)格式传输数据
你可以用 chrome 格式化插件进行打开:
http://www.quanmin.tv/json/rooms/333/info4.json?t=24460517
显示的是这个样式:

那么在python当中如何读写json文件呢?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
>>> import json >>> dir(json) # 返回json 所有的方法 ['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner'] In [9]: json.__all__ Out[9]: ['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder'] |
对 dumps 和 loads的应用:
我们可以使用标准库当中的json模块,其中的loads,dumps函数可以完成对json数据的读写。
dumps 可以从dict --> str
loads 可以从str ---> str
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# -*- coding: utf-8 -*- __author__ = 'songhao' import json data = { 'name': 'ACME', 'shares': 100, 'price': 542.23 } json_str = json.dumps(data) print("dumps".center(31,"*")) print(json_str) print(type(json_str)) print("loads".center(31,"*")) data1 = json.loads(json_str) print(data1) print(type(data1)) |
输出解结果是:

1 2 3 4 5 6 7 |
json.dumps(l) =>'[1,2,"abc",{"age":"99","name":"zhangsan"}]' #可以看到经过这样一个转化,原本的数据还是发生了变化。 d = {'b':None,'a':5,'c':'zxc'} json.dumps(d) => '{"a":"5","c":"zxc","b":"null"}' # 可以看到其他的都没变,只不过这个None变成null |
Json dumps分割符的应用
1 2 3 4 5 6 7 8 9 10 11 12 |
In [10]: l = [1,2,'abc',{'name':'zhangsan','age':'99'}] In [11]: json.dumps(l, separators=[',k',':,']) Out[11]: '[1,k2,k"abc",k{"name":,"zhangsan",k"age":,"99"}]' In [12]: json.dumps(l, separators=[',k,',',:,']) Out[12]: '[1,k,2,k,"abc",k,{"name",:,"zhangsan",k,"age",:,"99"}]' # dumps另外一个参数是 排序,默认状态下是false In [13]: json.dumps(l, sort_keys=True) Out[13]: '[1, 2, "abc", {"age": "99", "name": "zhangsan"}]' |
如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# -*- coding: utf-8 -*- __author__ = 'songhao' import json data = { 'name': 'ACME', 'shares': 100, 'price': 542.23 } print("dump/load 使用之前".center(30, "*")) print(data) print(type(data)) # Writing JSON data with open('data.json', 'w') as f: json.dump(data, f) # Reading data back with open('data.json', 'r') as f: data = json.load(f) print("dump/load 使用之后".center(30, "*")) print(data) print(type(data)) |

