栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

python模块(六)------JSON模块及其常用方法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python模块(六)------JSON模块及其常用方法

python模块(五)------base64模块及其常用方法

json模块
  • 使用之前必需先导入
>>> import json
  • json.dumps(x)把给定参数x变成JSON字符串即JSON字符串的编码
>>> list = [1,"ab",("a",3),{"name":"ls","age":25}]
>>> json.dumps(list)
'[1, "ab", ["a", 3], {"name": "ls", "age": 25}]'
>>> json.dumps({"c":3,"a":1,"b":2},sort_keys = True)  #sort_keys表示是否是否按键进行排序
'{"a": 1, "b": 2, "c": 3}'
>>> print(json.dumps(""foobar"))
""foobar"
>>> print(json.dumps('u1234'))
"u1234"
>>> print(json.dumps('\'))
"\"
>>> print(json.dumps({'c': 3, 'a': 1, 'b':2}, sort_keys=True, indent=4))  # indent表示前面缩进的字符数
{
    "a": 1,
    "b": 2,
    "c": 3
}
>>> json.dumps(float('-inf'))
'-Infinity'
>>> json.dumps(float('nan'))
'NaN'
  • json.dumps(x)中其他不常用的参数详解
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)

#如果 skipkeys 是 true (默认为 False),那么那些不是基本对象(包括 str, int、float、bool、None)的字典的键会被跳过;否则引发一个 TypeError。

#如果 ensure_ascii 是 true (即默认值),输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。

#如果 check_circular 是为假值 (默认为 True),那么容器类型的循环引用检验会被跳过并且循环引用会引发一个 RecursionError (或者更糟的情况)。

#如果 allow_nan 是 false(默认为 True),那么在对严格 JSON 规格范围外的 float 类型值(nan、inf 和 -inf)进行序列化时会引发一个 ValueError。如果 allow_nan 是 true,则使用它们的 JavaScript 等价形式(NaN、Infinity 和 -Infinity)。

#如果 indent 是一个非负整数或者字符串,那么 JSON 数组元素和对象成员会被美化输出为该值指定的缩进等级。 如果缩进等级为零、负数或者 "",则只会添加换行符。 None (默认值) 选择最紧凑的表达。 使用一个正整数会让每一层缩进同样数量的空格。 如果 indent 是一个字符串 (比如 "t"),那个字符串会被用于缩进每一层。

#separators 应当是一个 (item_separator, key_separator) 元组。当 indent 为 None 时,默认值取 (', ', ': '),否则取 (',', ': ')。为了得到最紧凑的 JSON 表达式,你应该指定其为 (',', ':') 以消除空白字符。

#当 default 被指定时,其应该是一个函数,每当某个对象无法被序列化时它会被调用。它应该返回该对象的一个可以被 JSON 编码的版本或者引发一个 TypeError。如果没有被指定,则会直接引发 TypeError。

#如果 sort_keys 是 true(默认为 False),那么字典的输出会以键的顺序排序。

#为了使用一个自定义的 JSONEncoder 子类(比如:覆盖了 default() 方法来序列化额外的类型), 通过 cls 关键字参数来指定;否则将使用 JSONEncoder。
  • json.loads(x)把给定参数的JSON字符串x变成列表、字典等等即JSON对象的解码
>>> s = '[1,"ab",{"name":"ls","age":25},null]'
>>> json.loads(s)
[1, 'ab', {'name': 'ls', 'age': 25}, None]
>>> json.loads('"\"foo\bar"')
'"foox08ar'
>>> json.loads('-Infinity')
-inf
>>> json.loads('NaN')
nan
  • json.loads(x)中其他不常用的参数详解
json.loads(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

#object_hook 是一个可选的函数,它会被调用于每一个解码出的对象字面量(即一个 dict)。object_hook 的返回值会取代原本的 dict。这一特性能够被用于实现自定义解码器(如 JSON-RPC 的类型提示)。

#object_pairs_hook 是一个可选的函数,它会被调用于每一个有序列表对解码出的对象字面量。 object_pairs_hook 的返回值将会取代原本的 dict 。这一特性能够被用于实现自定义解码器。如果 object_hook 也被定义, object_pairs_hook 优先。

#parse_float ,如果指定,将与每个要解码 JSON 浮点数的字符串一同调用。默认状态下,相当于 float(num_str) 。可以用于对 JSON 浮点数使用其它数据类型和语法分析程序 (比如 decimal.Decimal )。

#parse_int ,如果指定,将与每个要解码 JSON 整数的字符串一同调用。默认状态下,相当于 int(num_str) 。可以用于对 JSON 整数使用其它数据类型和语法分析程序 (比如 float )。

#parse_constant ,如果指定,将要与以下字符串中的一个一同调用: '-Infinity' , 'Infinity' , 'NaN' 。如果遇到无效的 JSON 数字则可以使用它引发异常。

#要使用自定义的 JSONDecoder 子类,用 cls 指定他;否则使用 JSONDecoder 。额外的关键词参数会通过类的构造函数传递。
  • JSON解码器
class json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)

#默认情况下,解码执行以下翻译:JSON,Python,object -- 对象,dict,array,list -- 列表,string,str,number (int),int,number (real),float,true,True,false,False,null,None

#如果指定了 object_hook,它将被调用并传入每个已解码 JSON 对象的结果,并且其返回值将被用来替代给定的 dict。 它可被用于提供自定义的反序列化操作(例如支持 JSON-RPC 类提示)。

#如果指定了 object_pairs_hook 则它将被调用并传入以对照值有序列表进行解码的每个 JSON 对象的结果。 object_pairs_hook 的结果值将被用来替代 dict。 这一特性可被用于实现自定义解码器。 如果还定义了 object_hook,则 object_pairs_hook 的优先级更高。

#parse_float ,如果指定,将与每个要解码 JSON 浮点数的字符串一同调用。默认状态下,相当于 float(num_str) 。可以用于对 JSON 浮点数使用其它数据类型和语法分析程序 (比如 decimal.Decimal )。

#parse_int ,如果指定,将与每个要解码 JSON 整数的字符串一同调用。默认状态下,相当于 int(num_str) 。可以用于对 JSON 整数使用其它数据类型和语法分析程序 (比如 float )。

#parse_constant ,如果指定,将要与以下字符串中的一个一同调用: '-Infinity' , 'Infinity' , 'NaN' 。如果遇到无效的 JSON 数字则可以使用它引发异常。

#如果 strict 为 false (默认为 True ),那么控制字符将被允许在字符串内。在此上下文中的控制字符编码在范围 0--31 内的字符,包括 't' (制表符), 'n' , 'r' 和 '' 。
  • JSON编码器
class json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)

#默认支持以下对象和类型:Python,JSON,dict,object -- 对象,list, tuple,array,str,string,int, float, int 和 float 派生的枚举,number,True,true,False,false,None,null

#如果 skipkeys 为假值(默认),则当尝试对非 str, int, float 或 None 的键进行编码时将会引发 TypeError。 如果 skipkeys 为真值,这些条目将被直接跳过。

#如果 ensure_ascii 是 true (即默认值),输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。

#如果 check_circular 为 true (默认),那么列表,字典,和自定义编码的对象在编码期间会被检查重复循环引用防止无限递归(无限递归将导致 RecursionError )。否则,这样进行检查。

#如果 allow_nan 为 true (默认),那么 NaN , Infinity ,和 -Infinity 进行编码。此行为不符合 JSON 规范,但与大多数的基于 Javascript 的编码器和解码器一致。否则,它将是一个 ValueError 来编码这些浮点数。

python模块(七)| python爬虫(一)------urllib模块及其常用方法

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037205.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号