JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。JSON的数据格式其实就是python的字典格式,包含方括号括起来的数组,也就是python里面的列表。官网:https://docs.python.org/3/library/json.html
在python中,有专门处理json格式的模块—— json 和 picle模块
json模块和picle模块都有 dumps、dump、loads、load四种方法,而且用法一样,当然还有其他方法,两者不同的是:
json模块序列化出来的是通用格式,其它编程语言都认识,就是普通的字符串,
picle模块序列化出来的只有python可以认识,其他编程语言不认识的,表现为乱码
不过picle可以序列化函数,但是其他文件想用该函数,在该文件中需要有该文件的定义(定义和参数必须相同,内容可以不同)
这里我主要对json介绍
JSON转换为python对象
JSON | Python |
object | dict |
array | list |
string | unicode |
number (int) | int, long |
number (real) | float |
true | True |
false | False |
null | None |
python对象转换为JSON
Python | JSON |
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
一、 dumps 和 dump:
dumps和dump序列化方法
dumps:序列化为str,
dump:必须传文件,将序列化的str保存到文件中
dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw): # 序列号 “obj” 数据类型 转换为 JSON格式的字符串 dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw): """ 有两个动作,一个动作是将”obj“转换为JSON格式的字符串,一个动作是将字符串写入到文件中,也就是说文件描述符fp是必须要的参数 """
示例代码:
import json print(json.dumps([])) print(json.dumps(1)) print(json.dumps("1")) dict1 = {1:"one",2:"two",3:"three"} print(json.dumps(dict1)) with open("test.json","w",encoding="utf-8") as f: f.write("this is dumps\n") f.write(json.dumps(dict1,indent=4)) #1使用dumps f.write("\n") f.write("this is dump\n") json.dump(dict1,f,indent=4) #2使用dump,与1效果一致 #格式化:indent=4
执行效果
[]
1
"1"
{"1": "one", "2": "two", "3": "three"}
文件内容:
this is dumps { "1": "one", "2": "two", "3": "three" } this is dump { "1": "one", "2": "two", "3": "three" }
二、 loads 和 load
loads和load 反序列化方法
loads:反序列化,
load :只接收文件描述符,完成了读取文件和反序列化
loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) """ 将包含str类型的JSON文档反序列化为一个python对象""" load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) """将一个包含JSON格式数据的可读文件饭序列化为一个python对象"""
代码示例:
import json json_l = json.loads('{"1": "one", "2": "two", "3": "three"}') print(type(json_l),json_l) json_2 ={"1": "one", "2": "two", "3": "three"} with open("test.json","w",encoding="utf-8") as f: f.write(json.dumps(json_2,indent=4)) #1使用dumps with open("test.json","r",encoding="utf-8") as f: aa= json.loads(f.read()) # 与 json.loads(f.read()) f.seek(0) #将光标移动到起始位置 bb = json.load(f) print(type(aa),aa) print(type(bb),bb)执行结果:
执行结果:
<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}
<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}
<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}
三、encoder 和decoder模块:
decoder和encoder编码器和解码器
json.JSONDecoder([encoding[, object_hook[, parse_float[, parse_int[, parse_constant[, strict[, object_pairs_hook]]]]]]]) json.JSONEncoder([skipkeys[, ensure_ascii[, check_circular[, allow_nan[, sort_keys[, indent[, separators[, encoding[, default]]]]]]]]])
代码示例:
import json data = [{ 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 }] json = json.JSONEncoder().encode(data) print (type(json),json)
执行结果:
<class 'str'> [{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
代码示例:
import json data1 = {1:"one",2:"two",3:"three"} json_string=json.dumps(data1) with open("test1.json","w",encoding="utf-8") as f: #将json_string写入到文件中 f.write(json.dumps(json_string,indent=4)) with open("test1.json","r",encoding="utf-8") as f2: #读取json文件 f2.seek(0) aa= json.loads(f2.read()) json2 = json.JSONDecoder().decode(aa) #json print (type(json2),json2)
执行结果:
<class 'dict'> {'1': 'one', '2': 'two', '3': 'three'}