JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写,他的数据结构与Python中的字典一样,键值对来表示数据间的关系,可以包含列表。
在编写接口传递数据时,往往需要使用JSON对数据进行封装。python和json数据类型的转换,看作为编码与解码。
主要讲一下他的四个方法:
1json.dumps()将 Python 对象编码成 JSON对象,字符串str
2json.loads()将已编码的 JSON 字符串解码为 Python 对象
3json.dump()
4json.load()
(一)json.dumps()和json.dump()
1.都是序列化的方法,对Python对象编码
json.dumps() 将 Python 对象序列化,编码成 JSON 字符串,存在一个对应的转换表
json.dump()也是编码成json格式的字符串,但 dump必须传文件描述符,将序列化的str保存到文件中
编码:json.dumps()
| Python | JSON |
| dict | object |
| list, tuple | array |
| str | string |
| int, float, int- & float-derived Enums | number |
| True | true |
| False | false |
| None | null |
语法:json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None,
separators=None, encoding="utf-8",default=None, sort_keys=False, **kw)
# Serialize ``obj`` to a JSON formatted ``str``.
# 序列号 “obj” 数据类型 转换为 JSON格式的字符串
语法: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, fp是默认的必选参数,其他可选参数
可以理解为两个动作,一个动作是将”obj“转换为JSON格式的字符串,还有一个动作是将字符串写入到文件中,也就是说文件描述符fp是必须要的参数 """
2.例句:
>>>a={ "errcode":"0", "errmsg":"" , "success":"true"}
>>>type(a)
dict
>>>aj=json.dumps(a)
>>>aj
'{"errcode": "0", "errmsg": "", "success": "true"}'
把Python对象编码成json数据,字符串。
>>>type(aj)
str
>>>with open('D://file.txt','w') as f:
>>>b=json.dump(a,f)
作用和下面形同,将数据编码并且存储到文件中。
>>>with open('D://file.txt','w') as f:
>>>f.write(a)
(二)json.loads()和json.load()
1. 反序列化,是对json对象的解码
json.loads() 将 JSON 字符串解码成Python对象 ,存在一个对应转换的表
json.load() 将 JSON 字符串解码成Python对象,并将解码后的Python对象保存到文件中
解码:json.loads()
| JSON | Python |
|---|---|
| object | dict |
| array | list |
| string | str |
| number (int) | int |
| number (real) | float |
| true | True |
| false | False |
| null | None |
语法:与上面的相同,转换相反,将json数据解码成Python对象
2例句:
>>>b=json.loads(aj)
>>>b
{'errcode': '0', 'errmsg': '', 'success': 'true'}
>>>type(b)
dict
这是对json数据的解码,解码后为Python的字典类型。对于组成元素为字典的字符串,可以使用json.loads()方法转换为字典,例如:
>>>c='{"a":1,"e":3}'
>>>type(c)
str
>>>d=json.loads(c)
>>>d
{"a":1,"e":3}
>>>type(d)
dict
注意:这里的字典的字符串c包含的字典的键必须为双引号,单引号无法转换。
(三)第三方demjson模块,用来编码解码json对象
demjson.encode(),python编码为json
demjson.decode(),json解码为Python
详细可以看文档demjson
>>> import demjson
>>> demjson.encode( ['one',42,True,None] ) # From Python to JSON
'["one",42,true,null]'
>>> demjson.decode( '["one",42,true,null]' ) # From JSON to Python
['one', 42, True, None]
贴几个参考的链接: