笔记-python-standard library-19.2 json
笔记-python-standard library-19.2 json
1. JSON简介
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
2. 安装使用
使用json函数需导入json库:import json
python3环境自带该库
source code: Lib/json/__init_.py
最常用的功能:
|
函数 |
描述 |
|
json.dumps |
将 Python 对象编码成 JSON 字符串 |
|
json.loads |
将已编码的 JSON 字符串解码为 Python 对象 |
|
json.dump |
将数据写入json文件中 |
|
json.load |
从json文件中读取数据 |
2. 使用
2.1. json.dump
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格式流写入文件(准确来说是文件句柄,也支持写入数据写入类文件句柄)
skipkeys:如果为True,非基本类型键(str,int,float,bool,None)会被跳过并抛出一个TypeError异常。
ensure_ascii:如果为真(默认),输入进行转义;为否则不进行转义。
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
with open('a.txt', 'w', encoding='utf-8') as fi:
js_dump = json.dump(data, fi)
print(js_dump)
2.2. json.dumps
json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)
与json.dump()基本类似,除了不写入文件而是返回一个str对象。
需要注意的是JSON中键/值对的键总是str类型的,当一个字典转化为JSON格式,所有的键都被转化为字符串。
而这会导致存在非字符串键时有loads(dumps(x)) != x
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
js = json.dumps(data)
print(type(js)) #<class 'str'>
2.3. json.load
json.load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
从文件中读取数据
a = [1,2,3,4,5,6,7,8,9]
with open('a.txt', 'w', encoding='utf-8') as fi:
js_dump = json.dump(a, fi)
with open('a.txt', 'r', encoding='utf-8') as fi:
data = json.load(fi)
print(type(data)) #<class ‘list’>
2.4. json.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)
将str,bytes,bytearray类型的实例转换为python对象。
js = json.loads(json_str)
2.5. 编码与解码
class json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)
Simple JSON decoder.
格式转换对应表:
|
JSON |
Python |
|
object |
dict |
|
array |
list |
|
string |
str |
|
number (int) |
int |
|
number (real) |
float |
|
true |
True |
|
false |
False |
|
null |
None |
class json.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)¶
Extensible JSON encoder for Python data structures.
格式转换对应表:
|
Python |
JSON |
|
dict |
object |
|
list, tuple |
array |
|
str |
string |
|
int, float, int- & float-derived Enums |
number |
|
True |
true |
|
False |
false |
|
None |
null |
2.6. exceptions
exception json.JSONDecodeError(msg, doc, pos)
Subclass of ValueError with the following additional attributes:
msg:
The unformatted error message.
doc
The JSON document being parsed.
pos
The start index of doc where parsing failed.
lineno
The line corresponding to pos.
colno
The column corresponding to pos.

浙公网安备 33010602011771号