10:处理 json
json 通用的数据类型, 所有的语言都认识。json 是字符串。key-value 必须使用双引号
1. loads() 和 dumps() 的使用
- json.loads() 将 json 字符串转换成字典。
- json.dumps() 将字典转换成 json 字符串。
1 s = '''{ 2 "error_code":0, 3 "stu_info":[ 4 { 5 "id":100, 6 "name":"小明" 7 }, 8 { 9 "id":202, 10 "name":"小黑" 11 } 12 ] 13 } 14 ''' 15 # json格式校验网址 www.bejson,com 16 import json 17 res = json.loads(s) # json 字符串转成字典 18 print(res) 19 print(type(res)) 20 21 stus = {'test1':'123', 'test2':'456', '中文':'中文test'} 22 res2 = json.dumps(stus, ensure_ascii=False) # 字典转成 json. 如果有中文,设置ensure_ascii=False 23 print(res2) 24 print(type(res2)) 25 res3 = json.dumps(stus, indent=4) # indent 设置缩进 26 print(res3)
1 # 输出结果: 2 {'error_code': 0, 'stu_info': [{'id': 100, 'name': '小明'}, {'id': 202, 'name': '小黑'}]} 3 <class 'dict'> 4 {"test1": "123", "test2": "456"} 5 <class 'str'>
在处理 MD5 加密的时候经常需要使用 json.dumps() 方法将字典转换成 json 字符串。上面的运行结果可以看到转换成 json 时冒号后面有个空格,这会导致加密结果不一致。所以在转换的时候需要加个参数 separators=(',',':'),代码如下:
1 res2 = json.dumps(stus, separators=(',',':'),ensure_ascii=False) # 字典转成 json. 如果有中文,设置ensure_ascii=False 2 print(res2) 3 4 #输出结果: 5 {"test1":"123","test2":"456","中文":"中文test"}
2. json.loads() 、json.load() 的区别
1 # load 和 loads 的区别: 2 # loads 传的是个字符串 3 f = open('stus.json', encoding='utf-8') 4 content = f.read() # read()获取的是一个字符串对象 5 user_dic = json.loads(content) # 使用字符串作为参数 6 print(user_dic) 7 8 # load 传的是个文件对象 9 f = open('stus.json', encoding='utf-8') 10 user_dic = json.load(f) #直接使用文件对象 f 作为参数 11 print(user_dic)
3. json.dumps()、json.dump() 的区别
1 # dump 和 dumps 的区别: 2 # 如果要把字典写进文件里,那么使用 dump 3 f = open('stus2.json', encoding='utf-8') 4 json.dump(stus, f, ensure_ascii=False) # 直接把 stus 写进了 stus2.json 文件里