Json解析包括编码(encoding)与解码(decoding)。编码是将python数据类型转换为json格式,解码是将json格式中数据解析对应到python数据类型。即编码和解码是数据类类型序列化和反序列化过程。
[注]:python的基本类型 str,unicode,int,long,float,bool,None
Json库是处理json格式的python 标准库,主要包括两类函数:操作函数与解析函数。
编码
使用dumps和dump函数进行编码,其中dump输出到文件fp中,其他功能与dumps一致。
def 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)
常用参数为
Skipkeys
:默认值是False
,如果dict
的keys
内的数据不是python的基本类型,设置为False
时,就会报TypeError
的错误。此时设置成True
,则会跳过这类key
ensure_ascii
:默认值True
,如果dic
t内含有non-ASCII
的字符,则会类似\uXXXX的显示数据,设置成False
后,就能正常显示
indent
:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent
的数量显示前面的空白
separators
:分隔符,实际上是(item_separator, dict_separator)
的一个元组,默认的就是(',',':')
;这表示dictionary
内keys
之间用“,”
隔开,而KEY
和value
之间用“:”
隔开。
sort_keys
:将数据根据keys
的值进行排序。
例如
import json
dic1 = {'name': "Paris", 'population': 2243}
json_dic1 = json.dumps(dic1)
print (json_dic1)
json_dic2 = json.dump(dic1,sort_keys=True,indent =4,separators=(',', ': '),ensure_ascii=True )
print (json_dic2)
输出为
{"name": "Paris", "population": 2243}
{
"name": "Paris",
"population": 2243
}
使用dumps
fp = open('a.json', 'w')
dic1 = {'name': "Paris", 'population': 2243}
json_dic2 = json.dump(dic1,fp,sort_keys=True,indent =4,separators=(',', ': '),ensure_ascii=True )
在a.json中
{
"name": "Paris",
"population": 2243
}
解码
使用loads与load函数进行解码,与dumps相同,load是从文件读入,其他和loads相同,常见参数可参照上文。
def loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
例如,使用loads进行解码:
fp = open('a.json', 'r',encoding='utf-8')
info = json.load(fp)
print(info)
输出为:
{'name': 'Paris', 'population': 2243}
注意
1.以上内容实用python3.7,在python2.7中函数有encoding
参数,默认是UTF-8
,用于设置json数据的编码方式。原因是python 2.7的默认编码格式是ascii编码,而python3的已经是unicode,在学习编解码的时,有出现乱码的问题,也有出现list
或者dictionary
或者tuple
类型内的中文显示为unicode的问题。出现乱码的时候,应该先看下当前字符编码格式是什么,再看下当前文件编码格式是什么,或者没有设置文件格式时,查看下IDE的默认编码格式是什么。建议在每次编码,都对文件编码格式进行指定,如在文件前设置# coding= utf-8
。
2.序列化是指将对象数据类型转换为可以存储或网络传输格式的过程,传输格式一般为json
和xml
。解析xml常用的库为BeautifulSoup
以及其他第三方库,在后面会陆续探讨。
参考
更多内容,欢迎补充