嵌套记录
Hoppy 又拉开了数据柜的下一层抽屉。这次卷轴不再是一层平平的记录:抽屉里面还有小格子,小格子里还有纸条,纸条旁边还压着一串线索标记。
所以今天的关键,不是学一个更大的新系统,而是建立一个很实用的直觉:真实记录常常要一层一层进入,才能拿到你真正想读的内容。
有些值本身,还是一份小记录或一个列表
当 JSON 里某个字段的值本身又是一份 dict,或者是一段 list,你看到的就是嵌套结构。别急着把它想得很复杂:很多时候,你只是先走进一层,再走进下一层。
camp_box = {
"outer": {
"label": "Moss Drawer",
"tokens": ["leaf", "bell", "rope"]
}
}
label = camp_box["outer"]["label"]
first_token = camp_box["outer"]["tokens"][0]
print("Label:", label)
print("First token:", first_token)
这里的读法就是:先到 "outer",再去里面找 "label" 或 "tokens"。如果 tokens 是一个列表,那你再像平常读列表那样,用索引拿出某一项。
今天的任务:像开抽屉一样,逐层拿到三个线索
真正的 starter 已经帮你把 nested_record.json 读进了 nested_record。你的任务不是重写读文件,而是沿着记录的路径,把三个目标值取出来。
starter 会先打印 nested_record。先看一眼:哪一层是大抽屉,哪一层是纸条,哪一层是列表。
把 drawer_label 设成 cabinet 里的抽屉标签;把 clue_word 设成 hidden_note 里的线索词;把 second_token 设成 tokens 列表里的第 2 个元素。
运行后,你会先看到完整记录,再看到从不同层里取出的三个值。这样一层层走进去,就是读取嵌套 JSON 最基础也最常见的方式。
今天只做轻量的嵌套读取:嵌套 dict、嵌套 list、逐层访问。我们不展开深层复杂数据,不讲递归,也不把错误处理当主线。
参考答案点击展开点击收起
import json
with open("nested_record.json", "r", encoding="utf-8") as file:
nested_record = json.load(file)
print("Nested record:", nested_record)
drawer_label = nested_record["cabinet"]["drawer_label"]
clue_word = nested_record["cabinet"]["hidden_note"]["clue_word"]
second_token = nested_record["cabinet"]["hidden_note"]["tokens"][1]
print("Drawer label:", drawer_label)
print("Clue word:", clue_word)
print("Second token:", second_token)高级技巧想更进一步?点击展开点击收起
这节课真正想留下来的感觉是:嵌套记录并不神秘,它只是“值里面还有下一层”。你只要沿着清楚的路径往里走,就能把目标信息拿出来。
下一课,Hoppy 会从“读别人整理好的记录”,再往前迈一步:自己把结果整理成 JSON 风格的结构化输出。