跳到主要内容

📒 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, "看电视"]
},
...
]