pythonjsonbool_python学习笔记|数据格式化——JSON解析

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,如果dict内含有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以及其他第三方库,在后面会陆续探讨。

参考

更多内容,欢迎补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值