Python之json模块详解

在python中,可以使用json模块对JSON数据进行编码和解码操作

json模块主要包含如下模块:
(1)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)

json.dump()方法的功能主要是对数据进行编码,将obj序列化为fp,fp是类文件对象。因为json模块总是产生str对象,而不是bytes对象,所以fp.write()必须支持str输入

# 把Python的类型写入到类文件对象中
with open("file.txt","w",encoding="utf-8") as f:
	# fp参数指的是类文件对象,具有rend()或write()方法的对象。
    json.dump(a,f)
  • 参数 ensure_ascii为True(默认值),则保证所有传入的非ASCII字符都进行转义。如果为False,则按字符原样输出。
  • 参数check_circular为False(默认值为True),则将跳过容器类型的循环引用检查,循环引用将导致OverflowError错误。
  • 参数allow_nan为False(默认值为True),则ValueError将序列化超出范围的浮点值,并严格遵守JSON规范。如果allow_nan为True,则使用与它等效的JS代码。
  • 如果参数indent的缩进是非负整数或字符串,那么JSON数组元素和对象成员将以该缩进级别输出。如果缩进级别是0、负数或"",则只插入换行符。默认值None表示用最紧凑的格式显示。当使用正整数缩进时,每个级别都有许多空格。如果缩进的字符串(例如"\t"),则该字符串用于缩进每个级别。
  • 参数sort_keys为True(默认为False),则字典的输出将按键进行排序。

(2)json.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)

json.dumps()方法的功能是使用转换关系将obj序列化为JSON格式的str。各个参数的含义与上面的json.dump()完全相同

import json
dict1 = dict(a=1,b=2)
dumps_dict1 = json.dumps(dict1)
print(type(dict1) )
print(dumps_dict1)
print(type(dumps_dict1))

结果

<class 'dict'>
{"a": 1, "b": 2}
<class 'str'>

至于两者的区别,简单的来说,如果你是处理文件,就直接用json.dump(),如果处理的是字符串,则用json.dumps()

(3)json.load(fp, *, cls=None, object_hook=None, parse_float=None,
parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

方法json.load()主要是对数据进行解码,操作的是一个类对象文件

#把类文件对象转化为python 的类型
with open("file.txt","r") as f:
  	json.load(f)
  • 参数object_hook 是一个可选函数,能够被任何对象字面值解码的结果所调用。使用的是object_hook的返回值而不是dict。该特征可以用于实现定制解码器。
  • object_pairs_hook也是一个可选函数,将使用任何对象字面值的结果进行调用,并使用有序列表进行解码。使用的是object_pairs_hook的返回值,而不是dict。该特征可以用于实现依赖键-值对的自定义解码器(例如collections.OrderedDict()会记住插入的顺序)。如果还定义了object_hook ,则object_pairs_hook会优先解码。
  • 如果指定了parse_float,则使用要解码的每个JSON浮点数类型的字符串进行调用。默认情况下,这相当于float(num_str)。
  • 如果指定了parse_int,则使用要解码的每个JSON整型字符串进行调用。默认情况下,这相当于int(num_str)。
  • 如果指定了parse_constant,则使用’-Infinity’或者’NaN’调用。这样,当遇到无效的JSON数字时,可以引发异常。

(4)json.loads(s, *, encoding=None, cls=None,object_hook=None, parse_float=None,parse_int=None, parse_constant=None,object_pairs_hook=None, **kw)

方法json.loads()的功能是使用转换关系将包含JSON文档的S(一个str实例)解压缩为Python对象。其他参数的含义与方法json.load()完全相同,如果反序列化的数据不是有效的JSON文档,则会引发JSONDecodeError错误。

示例:

import json
dict1 = dict(a=1,b=2)
dumps_dict1 = json.dumps(dict1)
print(type(dumps_dict1))
loads_dict1 = json.loads(dumps_dict1)
print(loads_dict1)
print(type(loads_dict1))

输出:

<class 'str'>
{'a': 1, 'b': 2}
<class 'dict'>

码字不易,请多多支持 ,谢谢

发布了3 篇原创文章 · 获赞 5 · 访问量 122

猜你喜欢

转载自blog.csdn.net/mr_zhongjie/article/details/105181940