python 序列化及反序列化
1. json 数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于阅读和理解。JSON 格式可以对高纬数据进行表达和存储。
JSON 格式通过键值对来表达信息,键是字符串,值可以是:
| 值 | 语法 |
|---|---|
| 对象 | 一对大括号包裹,元素是键值对,键值对用逗号分隔 {key:value} |
| 数组 | 一对中括号包裹,元素是 JSON 可以表达的所有数据类型,元素之间使用逗号分隔 [value1,value2,value3] |
| 字符串 | 双引号包裹 "kira" |
| 整数 | 12 |
| 浮点数 | 1.2 |
| 布尔型 | true,false |
| 空 | null |
例如:
创建一个名为 xinlan.json 的文本文件,将上面的 json 数据写入文件中。
2. python 操作 json 文件
直观上,JSON 格式和 python 中的对象类似,对应表示关系如下:
| JSON | PYTHON |
|---|---|
| 对象(object) | 字典(dict) |
| 数组(array) | 列表(list) |
| 字符串(string) | 字符串(str) |
| 整数(int) | 整数(int) |
| 实数(float) | 实数(float) |
| true | True |
| false | False |
| null | None |
直接通过字符串解析 json 文件不是太简单,python 提供了内置 json 模块用来解析 json 文件。
2.1 json 反序列化为 python
python 对象转 json 字符串称为序列化,反之为反序列化。
json 模块提供了两个函数来支持 json 字符串反序列化为一个 python 对象。
json.loads(s)
接收一个 json 格式的字符串,反序列化一个 python 对象。如果参数 s 的格式不满足 json 格式,抛出 JSONDecodeError 异常。
运行结果:
json.load(fb)
有时候需要从 json 文件中加载数据,这是一个快捷方法。接收一个以读方式打开的 json 文件对象,将文件中的 json 数据反序列化为一个 python 对象。
运行结果:
2.2 python 序列化为 json
与反序列化类似,序列化 json 模块也提供了两个对应的函数
-
json.dumps(obj,ensure_ascii=True,indent=None,sort_keys=False)将一个
python对象序列化为一个json格式的字符串。- obj:
python对象 - ensure_ascii: 默认为 True,输出保证将所有输入的非 ASCII 字符转义。如果 ensure_ascii 是 false,这些字符会原样输出。
- indent:一个非负整数或者字符串,JSON 数组元素和对象成员会被美化输出为该值指定的缩进等级。如果缩进等级为零、负数或者
"",则只会添加换行符。None``(默认值)选择最紧凑的表达。使用一个正整数会让每一层缩进同样数量的空格。如果 *indent* 是一个字符串(比如 ``"\t"),那个字符串会被用于缩进每一层。 - sort_keys:为 True(more 为 False),表示字典的输出会以键的顺序排序。
- obj:
运行结果:
json.dump(obj,fb,ensure_ascii=True,indent=None,sort_keys=False)
将一个 python 对象序列化为 json 数据后写入一个以 w 模式打开的文件。
- fb: 一个以文本写打开的文件句柄
其他参数同 json.dumps()
本文来自博客园,作者:测试玩家勇哥,转载请注明原文链接:https://www.cnblogs.com/Nephalem-262667641/articles/17302845.html

浙公网安备 33010602011771号