一、JSON基本概念
JSON代表JavaScript对象符号。它是一种轻量级的数据交换格式,用于存储和交换数据。它是一种独立于语言的格式,非常容易理解,因为它本质上是自描述的。 python中有一个内置包,它支持JSON数据,称为json。 JSON中的数据表示为quoted-strings,由大括号{}之间的键值映射组成。通俗来说就是一种在接口中易于使用的数据处理模块,但是json不属于数据格式。
二、Python和JSON类型映射
:::JSON::: | :::Python::: |
---|
object | dict |
array | list |
string | str |
number | int |
true | True |
false | False |
null | None |
三、JSON模块
Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它主要提供了四个方法: dump、dumps、load、loads。
dump和dumps对python对象进行序列化。将一个Python对象进行JSON格式的编码。
load和loads反序列化方法,将json格式数据解码为Python对象。
- json.load()从json文件中读取数据
- json.loads()将str类型的数据转换为dict类型
- json.dumps()将dict类型的数据转成str
- json.dump()将数据以json的数据类型写入文件中
dumps函数
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)
1.obj
表示要序列化的对象
3.skipkeys
默认为False。如果skipkeys是True则将跳过不是基本类型(str,int,float,bool,None)的dict键,不会引发TypeError。
4、ensure_ascii
默认值为True,能将所有传入的非ASCII字符转义输出。如果ensure_ascii为False,则这些字符将按原样输出。ensure_ascii=False,让文件中的中文可以直接显示!
5、check_circular
默认值为True。如果check_circular为False,则将跳过对容器类型的循环引用检查,循环引用将导致OverflowError。
6、allow_nan
默认值为True。如果allow_nan为True,则将使用它们的JavaScript等效项(NaN,Infinity,-Infinity)。
如果allow_nan为False,则严格遵守JSON规范,序列化超出范围的浮点值(nan,inf,-inf)会引发ValueError。
7、indent
设置缩进格式,默认值为None,选择的是最紧凑的表示。如果indent是非负整数或字符串,那么JSON数组元素和对象成员将使用该缩进级别进行输入;indent为0,负数或“”仅插入换行符;indent使用正整数缩进多个空格;如果indent是一个字符串(例如“\t”),则该字符串用于缩进每个级别。
8、separators
去除分隔符后面的空格,默认值为None。如果指定,则分隔符应为(item_separator,key_separator)元组。如果缩进为None,则默认为(’,’,’:’);要获得最紧凑的JSON表示,可以指定(’,’,’:’)以消除空格。
9、default
默认值为None。如果指定,则default应该是为无法以其他方式序列化的对象调用的函数。它应返回对象的JSON可编码版本或引发TypeError。如果未指定,则引发TypeError。
10、sort_keys
默认值为False。如果sort_keys为True,则字典的输出将按键值排序。
loads函数
json.loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
1、s
将s(包含JSON文档的str,bytes或bytearray实例)反序列化为Python对象。
2、encoding
指定一个编码的格式。
2、object_hook
默认值为None,object_hook是一个可选函数,此功能可用于实现自定义解码器。指定一个函数,该函数负责把反序列化后的基本类型对象转换成自定义类型的对象。
3、parse_float
默认值为None。如果指定了parse_float,用来对JSON float字符串进行解码,这可用于为JSON浮点数使用另一种数据类型或解析器。
4、parse_int
默认值为None。如果指定了parse_int,用来对JSON int字符串进行解码,这可以用于为JSON整数使用另一种数据类型或解析器。
5、parse_constant
默认值为None,如果指定了parse_constant,对-Infinity,Infinity,NaN字符串进行调用。如果遇到了无效的JSON符号,会引发异常。
如果进行反序列化(解码)的数据不是一个有效的JSON字符串,将会引发 JSONDecodeError异常。
四、实例
dumps
import json
dict_data_01 = {'姓名': 'zhangsan', '性别': '男', 10: None, "age": 18, None: True}
print(dict_data_01, type(dict_data_01))
json_data_01 = json.dumps(dict_data_01)
print(json_data_01, type(json_data_01))
json_data_01 = json.dumps(dict_data_01,ensure_ascii=False)
print(json_data_01, type(json_data_01))
loads
import json
json_data_02 = '{"姓名": "zhangsan", "性别": "男", "10": null, "age": 18, "null": true}'
dict_data_02 = json.loads(json_data_02)
print(json_data_02, type(json_data_02))
print(dict_data_02, type(dict_data_02))
五、最后
以上就是Python中json模块dumps与loads的详解,json模块中还有dump与load,是对json文件进行操作的,与文中类似。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)