高水平高职建设网站,怎么请人做网站,晋江文学城写作网站,建设香帅摩托车官网在 Python3版本中使用 JSON
本教程将会教我们如何使用 Python 编程语言编码和解码 JSON。
环境
在python3中#xff08;以及python2.6版本后的python2版本#xff09;内置了JSON模块#xff0c;无需额外安装另外的JSON模块。
简介
JSON模块是python内置的用来进行pytho…
在 Python3版本中使用 JSON
本教程将会教我们如何使用 Python 编程语言编码和解码 JSON。
环境
在python3中以及python2.6版本后的python2版本内置了JSON模块无需额外安装另外的JSON模块。
简介
JSON模块是python内置的用来进行python对象序列化和反序列化的模块。
序列化指将python对象转换为json格式的数据流反序列化则是将json格式的数据流转换为python对象。该模块中常用的方法有以下四个
json.dump 将Python对象序列化为Json格式的数据流并写入文件类型的对象中
json.dumps 将Python对象序列化为Json格式的字符串
json.load 从文件类型的对象中读取Json格式的数据并反序列化成Python对象
json.loads 将包含Json格式数据的字符串反序列化成Python对象
两个dump函数是将python对象转换为json可以理解为编码类似demjson的encode函数两个load函数是将json转换为python对象可以理解为JSON解析类似demjson的code函数。因为两个dump和两个load的功能相似所以小编只介绍其中一个介绍JSON格式数据的字符串的编码与解析也就是dumps和loads函数。json.dumps()
dumps可以传递的参数如下
json.dumps(obj, skipkeysFalse, ensure_asciiTrue, check_circularTrue, allow_nanTrue, clsNone, indentNone, separatorsNone, defaultNone, sort_keysFalse)
在日常使用中更多的情况我们只传递必须的obj参数这是一个对象其他参数为可选参数下表是该函数的所有参数的作用 参数 作用 obj必选项 要序列化的python对象 skipkeysFalse 是否跳过要序列化的对象中字典元素的key不是基本类型的数据 如果为 True则跳过如果为 False将抛出 TypeError异常。 ensure_asciiTrue 是否将要序列化的对象中的字符串中的非ascii字符进行转义。 如果该参数为True则将字符串中的非ascii字符转义成unicode字符串否则将不会进行转义。 check_circularTrue 是否进行容器类型的循环引用检查。 如果该参数设置为False则不进行检查但是可能会引发 OverflowError或更严重的情况。 如果该参数设置为True则将进行容器类型的循环引用检查并在发现循环引用时抛出异常。 allow_nanTrue 是否允许序列化超出范围的float 类型的值如float(inf) 、float(-inf) 、float(nan) 。 如果该参数设置为True则上面列出的那些值将依次使用JavaScript中等价的值 Infinity、-Infinity、 NaN来进 行替代 如果该参数设置为False并且要序列化的对象中出现了那些超出范围的值则将引发ValueError异常。 indentNone 是否在数组元素和对象成员前增加缩进以便使格式更加美观。 如果该参数设置为大于等于1的整数则添加换行符和对应数量的空格表示缩进如果设置为0则表示只添加换行符如果设置为 None则表示无缩进。 separatorsNone 设置Json中各项之间、对象的键和值之间的分隔符 该参数必须是一个2元组元组第一个元素表示Json数据中各项之间的分隔符元组的第二个元素表示Json对象的键和值之间的分隔符。默认的分隔符为’,’, ‘:’ defaultNone 指定一个函数用来将不可进行序列化的Python对象转化为可序列化的Python对象。 clsNone 指定一个定制的JSONEncoder 的子类例如重写了.default() 方法用来序列化附加的类型指定该参数时请使用cls 关键字参数。如果未指定该参数则将使用默认的JSONEncoder 。 sort_keysFalse 是否要将对象中字典元素按照key进行排序。 默认为False即不进行排序若指定为 True则会进行排序。
举个简单的例子
#!/usr/bin/python3
import json
# Python 字典类型转换为 JSON 对象
data {no : 1,name : W3CSchool,url : http://www.w3cschool.cn
}
json_str json.dumps(data)
print (Python 原始数据, repr(data))
print (JSON 对象, json_str)
python对象转化为JSON字符串的时候遵循以下转换规则
PythonJsondictobjectlist, tuplearraystrstringint, floatnumberTruetrueFalsefalseNonenull
json.loads()
loads可以传递的参数如下
json.loads(s,encodingNone, clsNone, object_hookNone, parse_floatNone, parse_intNone, parse_constantNone, object_pairs_hookNone)
在日常使用中更多的情况我们只传递必须的s参数这是一个字符串其他参数为可选参数下表是该函数的所有参数的作用 参数 作用 s必选项 要反序列化的JSON字符串encodingNone 该参数已弃用将会被忽略clsNone 指定一个定制的JsonDecoder 子类以便实现特定的反序列化需求object_hookNone 接受一个可调用对象用于处理解码后生成的Python对象中dict类型的值。 注意这个处理过程是递归进行的即返回的Python对象内部所有的字典结构都将被这个方法处理 parse_floatNone 用于处理解码后的Python对象中的float类型的值。 parse_intNone 接受一个可调用对象用于处理解码后的Python对象中的int 类型的值。 parse_constantNone接受一个可调用对象用于解码时对 Infinity、 -Infinity、 NaN或其他非法的Json数值的处理。 object_parse_hookNone 如果指定了该参数并且设置为一个可调用对象那么Json对象将被解码成一个元素为二元组的列表二元组的两个元素分别为Json对象中的键值对的键和值并且列表中元素的顺序与Json对象中键值对的顺序一致。
举个简单的例子
#!/usr/bin/python3
import json
# Python 字典类型转换为 JSON 对象
data1 {no : 1,name : W3CSchool,url : http://www.w3cschool.cn
}json_str json.dumps(data1)
print (Python 原始数据, repr(data1))
print (JSON 对象, json_str)# 将 JSON 对象转换为 Python 字典
data2 json.loads(json_str)
print (data2[name]: , data2[name])
print (data2[url]: , data2[url])
与序列化的过程类似JSON转化为python对象也遵循一定的规则
JsonPythonobjectdictarrayliststringstrnumberintintnumberrealfloattrueTruefalseFalsenullNone