| 进度条:学习第 37 天(37/191)|当前完成度:约 30% |
📎今日速览:主学 JSON(6 种值类型 → 对象数组嵌套 → 各语言转换 → 7 个报错坑),次学 EXE(PE 结构 + pyinstaller 打包),外加笔记自查纠错 6 处 ← 先看这段
〇、今日投入 & 产出(量化)
| 维度 | 内容 | 量化 |
|---|---|---|
| 投入-时间 | JSON/EXE 视频学习 + 手写笔记 5 页 + 笔记补丁核对 | 约 5 小时 |
| 投入-外部输入 | JSON/EXE 视频教程、手写笔记补丁资料(纠错+补充) | 2 类 |
| 产出-代码/数据 | 6 种值类型梳理、4 个转换函数、7 个报错坑、PE 5 大节 | 1 套笔记 |
| 产出-文档/博客 | 本篇 Day 37 学习笔记(含纠错 6 处 + 补丁全量) | 1 篇 |
一、今日任务(完成+收获)
1.1 今日任务原文
主学 JSON 分析,次学 EXE 文件形式,并用手写笔记 + 补丁合并出正确版本。
📷 图1:JSON 手写学习笔记(10.11,3 页)+ 今日任务清单
1.2 完成情况
| 任务项 | 计划 | 实际 | 状态 |
|---|---|---|---|
| JSON 基础:来源、与 XML 区别、应用场景 | 理清术语 | 笔记 3 页,术语全理清 | ✅ 完成 |
| JSON 语法:6 种值类型 + 对象/数组嵌套 | 掌握 | 掌握,含嵌套完整示例 | ✅ 完成 |
| EXE 文件:PE 结构 + pyinstaller 打包 | 掌握 | 掌握,打包命令已验证拼写 | ✅ 完成 |
| 笔记自查纠错 | 对照资料 | 纠出并更正 6 处 | ✅ 完成 |
1.3 今日收获 & 学到的知识点
① JSON 是什么:一种轻量级文本数据格式,来源于 JavaScript 的对象语法,但实际上独立于任何语言,本质就是一条字符串。
- 大白话:JSON 不是框架也不是工具,只是"一套写字规矩",能简单直观地把树状结构数据装进一条字符串里。
② 6 种值类型:字符串(必须双引号)、数字、布尔、null 这 4 种常规类型 + 对象{}、数组[]这 2 种可内嵌类型;关键必须是字符串,最后一项后面不能加逗号,值类型无需统一。
③ JSON vs XML(对比表)
| 对比项 | JSON | XML |
|---|---|---|
| 对谁友好 | 对人友好 | 对机器友好 |
| 适合场景 | 数据量不大、结构不复杂(接口参数、返回结果、配置文件、Elastic Search) | 数据量大、结构复杂 |
| 互相转换 | 大部分情况可互相转换 | 大部分情况可互相转换 |
④ Python 端转换方法(对照 JavaScript)
| JavaScript | Python | 作用 |
|---|---|---|
JSON.parse(text) | json.loads(text) | 字符串 → 对象(s=字符串) |
JSON.stringify(obj) | json.dumps(obj) | 对象 → 字符串(s=字符串) |
| (无) | json.load(f) | 读 .json 文件并解析 |
| (无) | json.dump(obj, f) | 把对象写入 .json 文件 |
- 记忆法:Python 里带 s 的是处理【字符串 string】,不带 s 的是处理【文件 file】。
⑤ JSON 常见报错坑(解析 API 返回时 90% 的错误来源)
键和字符串值必须用双引号,单引号非法:
{'a':1}❌ →{"a":1}✅JSON 不支持注释,配置文件想写注释要改用 YAML / TOML
最后一个键值对后面不能有逗号:
{"a":1,}❌字符串内的双引号要转义:
"他说 \"你好\""✅数字不能有前导零:
01❌;NaN/Infinity不是标准 JSON空值是小写
null(Python 里对应 None),True/False在 JSON 里必须小写嵌套完整示例(对象套数组、数组套对象):
{"店铺":"老王炒菜","营业":true,"评分":4.8,"菜单":[{"菜名":"番茄炒蛋","价格":12,"辣度":null},{"菜名":"辣椒炒肉","价格":28,"辣度":"高"}]}⑥ EXE / PE 文件:exe 和 dll 都是PE(Portable Executable,可移植的可执行文件),由DOS 头、PE 头、节表、节组成;常见节:.text指令代码、.data初始化数据、.idata导入表、.edata导出表、.rsrc资源(图标/光标/位图)。
- 大白话:所有文件本质都是一堆 0 和 1,由不同软件解释才有了"意义"——软件自己也是个 exe,也依然是数据。
⑦ pyinstaller 打包:pip install pyinstaller安装 →pyinstaller -F 文件名.py打包 → dist 文件夹里生成 exe。常用参数卡:
-F打成单个 exe 文件(最常用)-w运行时不弹黑色控制台窗口(做界面程序时用)-i 图标.ico自定义程序图标-D打成文件夹(默认模式,启动更快)注意:打包后的 exe 可能被杀毒软件误报,属正常现象。
⑧ 从源码到 exe 四步流程(一条线背下来):
源代码(.c)→预处理/编译→汇编(asm/obj)→链接器(Linker)→可执行文件(exe)
冷知识:文件头
"MZ"是程序员Mark Zbikowski的名字缩写,记人名更好记。验证小实验:用十六进制编辑器打开任意 exe,前两个字母应是
"MZ",往下翻能看到"This program cannot be run in DOS mode"。现代 Windows 是NT 内核,不是 DOS;exe 开头那段只是残留的 DOS 兼容程序(DOS stub),作用是万一在 DOS 下运行时打印提示语,属于历史遗留。
📷 图2:EXE 打包实操(10.12)+ PE 结构笔记截图
二、卡点分两类(已解决 / 未解决)
✅ 今日已解决
2.1 笔记自查纠错 6 处怎么解开的
什么时候出现:手写笔记混入 6 个错,是记笔记时凭印象写、没对照权威资料留下的。
我的理解:把"近似概念"当成了真——比如 HTML/XML 谁的爹是谁、Java 对 JSON 到底是不是天生支持。
解决办法:对照资料逐条核实,6 处全部改为正确:
HTML不是基于 XML 的。HTML 和 XML 是兄弟关系(都源自 SGML),基于 XML 的是 XHTML。
Java 对 JSON 是【非原生】支持,需引入 Gson / FastJson 等库。
安装命令拼写:
pip install pyinstaller打包命令:
pyinstaller -F 文件名.pyPE 资源节名是
.rsrc(不是.ysrc)。现代 Windows 是NT 内核,不是 DOS。exe 开头只是残留一段 DOS 兼容程序(DOS stub),作用是万一在 DOS 下运行时打印提示语,属于历史遗留。
✅验证结果:逐条核对完毕,6 处已更正,笔记补丁已并入本篇,不再有错写法流入博客。
📷 图3:纠错 6 处对照清单(笔记补丁原文)
2.2 EXE 从"黑盒"到"也是数据"的认知怎么解开的
什么时候出现:学 PE 结构前,一直以为 exe 是"神秘程序",碰不得。
我的理解:拆开看,exe 只是 DOS 头 + PE 头 + 节表 + 节,和 txt 一样是 0/1 序列。
解决办法:用"所有文件本质都是 0 和 1,区别只在谁来解释"这句话重新框定。
✅验证结果:现在能用自己的话讲清"软件本体也是数据",不再把它当黑盒。
❓ 还没搞懂(带到明天)
| 没吃透的点 | 卡在哪 | 准备什么时候啃 |
|---|---|---|
| Resource Hacker 修改 exe 资源实操 | 删除资源报错后"替换相同格式资源"的具体操作还没亲手跑过 | 抽空完成 |
💡 今天没踩硬坑,这条是"最拿不准、想验证但还没验证"的点。
三、小结和下一步计划
3.1 今日小结
JSON 教会我"数据有格式"——一套写字规矩就能把树状结构装进一条字符串
EXE 教会我"软件本体也是数据"——拆开看全是 0 和 1 加一个文件头。
两课合一句:底层全是数据,区别只在谁来解释。
3.2 ✨ 高光时刻 / 亮点
从自己的手写笔记里纠出 6 处错误——最有意思的是
"MZ"文件头竟是程序员 Mark Zbikowski 的名字缩写,而"Windows 是 DOS 系统"这个流传已久的说法被证实是错的(NT 内核,DOS 程序只是残留)。
为什么算高光:第一次不靠别人提醒,自己把"以为对的常识"推翻重来,笔记可信度直线上升。
3.3 下一步计划
| 任务 | 验收标准 |
|---|---|
| 补 Resource Hacker 实操 | 亲手删换一次 exe 资源,跑通不报错 |
| JSON 转换函数上手 | 用 Pythonjson.loads/dumps各跑一遍嵌套示例 |
📌3 行速记
· 做了:主学 JSON(6 种值类型/转换/7 报错坑)+ 次学 EXE(PE 结构/pyinstaller),笔记自查纠错 6 处
· 学会:JSON 是"一套写字规矩";软件本体也是 0/1 数据;MZ 是程序员名字缩写
· 卡住:Resource Hacker 改 exe 资源实操未亲手跑