📒 json 文件
本节介绍向 json 文件添加数据。
json 文件结构和本库支持的其它文件不一样,添加数据需向coord参数传入数据保存路径。
有如下 json 文件,本节所有示例基于此文件。
[
{
"姓名": "张三",
"基本情况": {"年龄": 17, "身高": 168.5, "性别": "男"},
"兴趣": ["打球", "看书", "编程"]
},
{
"姓名": "李四",
"基本情况": {"年龄": 16.5, "身高": 166, "性别": "女"},
"兴趣": ["写字", "旅游", "游泳"]
}
]
✅️️ 直接添加数据
对于根节点是列表的 json 数据,可直接用add_data()插入一条新数据。
from DrissionRecord import Recorder
data = {
"姓名": "王五",
"基本情况": {"年龄": 16.7, "身高": 165, "性别": "女"},
"兴趣": ["打羽毛球", "看电视", "篮球"]
}
r = Recorder('data.json')
r.add_data(data)
r.record()
注意
如果根节点是字典的 json 数据,不能直接添加。
✅️️ 向指定位置写入数据
📌 coord参数格式
add_data()方法的coord参数是一个路径,从 json 根节点开始,指向需要保存数据的节点。
coord参数接收一个列表,列表中每个元素为要选择的节点。
字典节点只能用str索引,列表节点只能用int索引,从1开始。
比如,要把张三年龄改为18,可用路径[1, '基本情况', '年龄']。
表示根节点的第 1 个元素,里面的"基本情况"节点,里面的'年龄'节点。
📌 操作逻辑
路径指向某个节点,就会覆盖某个节点的值。
如果指向列表节点的路径为0,表示向这个列表新增一个新元素。
路径中所有节点,如果不存在会自动创建。
如果某节点是一个基本类型(如str), 想在其子节点添加数据将会报错。
from DrissionRecord import Recorder
r = Recorder('data.json')
r.add_data(18, [1, '基本情况', '年龄'])
r.record()
效果:
[
{
"姓名": "张三",
"基本情况": {"年龄": 18, "身高": 168.5, "性别": "男"},
"兴趣": ["打球", "看书", "编程"]
},
...
]
如果要向'兴趣'列表中添加一项,要写成[1, '兴趣', 0],而不能写成[1, '兴趣']。
列表最后的0表示向列表中添加一个新数据,如果没有它,则这个列表会被覆盖。
from DrissionRecord import Recorder
r = Recorder('data.json')
r.add_data('看电视', [1, '兴趣', 0])
r.record()
效果:
[
{
"姓名": "张三",
"基本情况": { "年龄": 18, "身高": 168.5, "性别": "男"},
"兴趣": ["打球", "看书", "编程", "看电视"]
},
...
]
如果要向列表中指定位置写入数据,这个0可以写成其它数字。
如[1, '兴趣', 7]表示在'兴趣'列表中第 7 个元素写入数据,如果列表长度不足 7,在前面补充null。
from DrissionRecord import Recorder
r = Recorder('data.json')
r.add_data('看电视', [1, '兴趣', 7])
r.record()
效果:
[
{
"姓名": "张三",
"基本情况": { "年龄": 18, "身高": 168.5, "性别": "男"},
"兴趣": ["打球", "看书", "编程", null, null, null, "看电视"]
},
...
]