json
Python的内置库——json处理
{"firstName":"John", "lastName":"Doe"}对于dictionaries,keys需要是字符串类型(字典中任何非字符串类型的key在编码时会先转换为字符串)。而且,在web应用程序中,顶层对象被编码为一个字典是一个标准做法。
这句话大概意思是:
- 用{}开头和结尾
- 用str表示 key
- 用str, int, list, dict表示 value
- list用[index]访问
- dict用.key访问
json 字符串生成 python 对象:json.load()
python 对象格式化为 json 字符串:json.dump()
数据类型¶
转换对应表(python -> json)
| Python | JSON | 
|---|---|
| dict | object | 
| list, tuple | array | 
| str | string | 
| int, float | number | 
| True | true | 
| False | false | 
| None | null | 
转换对应表(json -> python)
| JSON | Python | 
|---|---|
| object | dict | 
| array | list | 
| string | str | 
| number(int) | int | 
| number(real) | float | 
| true | True | 
| false | False | 
| null | None | 
常用方法¶
| 方法 | 功能 | 总结 | 
|---|---|---|
| json.dump(obj,fp) | 将python数据类型转换并保存到json格式文件内 | p -> j,写入文件 | 
| json.dumps(obj) | 将python数据类型转换为json格式的字符串 | p -> j | 
| json.load(fp) | 从json格式的文件中读取数据并转换为python的类型 | 从文件读, j -> p | 
| json.loads(str) | 将json格式的字符串转换为python的类型 | j -> p | 
带s的是处理字符串 不带s的是从文件里处理
Python -> JSON¶
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.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)
- obj:需要被转换的Python对象
- fp:文件对象,要写入的文件
- skipkeys:- Fasle时:不是基本对象(int、str、bool、float)的键不会被跳过
- True时:不是基本对象(int、str、bool、float)的键会被跳过
 
- ensure_ascii:- True:将非ASCII字符转义,例如中文
- False:将非ASCII字符原样输出
 
- allow_nan:- True:对json规格范围外的float类型(nan、inf、-inf)序列化时会引发ValueError
- False:对json规格范围外的float类型(nan、inf、-inf)序列化时使用等价形式(NaN、Infinity、-Infinity)
 
- True:对json规格范围外的float类型(nan、inf、-inf)序列化时会引发
- indent:指定缩进等级(非负整数/字符串)- 0、负数、"":只添加换行符
- None:不缩进
- 正整数:每层缩进同样数量的空格
- 字符串:如\t,该字符串将被用于缩进每一层
 
- sort_keys:按字典的键排序
- 
default:其应该是一个函数,每当某个对象无法被序列化时它会被调用。它应该返回该对象的一个可以被 JSON 编码的版本或者引发一个TypeError。
- 
使用 dumps()
',JSON中都是使用双引号"
- 使用dump()
open()打开一个文件对象,然后将文件对象作为参数传入dump(),却没有使用close()关闭文件对象。这是错误的,会造成文件对象一直没有关闭而持续占用计算机资源。
解决方法:要么手动调用close()方法,要么用with语句
JSON -> Python¶
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
json.loads(s, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
- fp:文件对象,要写入的文件
- object_hook:是一个可选的函数,它会被调用于每一个解码出的对象字面量(即一个 dict)。object_hook 的返回值会取代原本的 dict。这一特性能够被用于实现自定义解码器(如 JSON-RPC 的类型提示)。
- 
parse_float、parse_int、parse_constant、object_pairs_hook:都是编码解码器需要的参数
- 
使用 loads()
',JSON中都是使用双引号"
- 使用load()从json文件中读取转换成Python对象
