原地编辑,还是施加补丁?
一次性、没人回看的修改直接编辑就对;RFC 6902 补丁是具名的有序操作序列,可以在跑之前审阅、在相似输入上回放、在跑完之后做差异对比——改动需要可问责时,选补丁。
Elysia Tools
导航
Workflow Playbook
带着记录对 JSON 结构动刀——动手前先盘点全部键路径,用 RFC 6901 指针精确寻址或用 JSONPath 灵活选集,按规则而非手工重命名键,以 RFC 6902 补丁施加可审计的操作序列,需要出门时扁平化、回来时无损还原。
专题
手术从成像开始。任何深度的 JSON 文档都把结构藏在随手的阅读之外——同一个键出现在两层就意思不同,数组出现在期望对象的位置就会弄断你正要写的规则——键清单把这片暗地形变成纸上的一张表。每条路径只出现一次,意外在规则写就之前浮出水面,而清单成为其后一切的地基:每个操作之后重新生成清单,两份清单的差异就是这次操作诚实的回执。
JSON 寻址有两个语域,混淆它们是新手最常见的税。指针——RFC 6901——是精确地址:/data/items/0/price 点名一个节点,要么解析要么失败,而且正是 JSON Patch 自己说的方言。路径查询——JSONPath 或 JMESPath 风格——是搜索:通配、过滤、投影,返回成组的节点,试错不要钱。让两者各归其位的纪律很简单——探索用路径,操作用指针——因为精确点名目标的操作,才是结果可以被预判的操作。
直接编辑 JSON 文件得到一个结果;施加 RFC 6902 补丁得到一个结果和一份记录。补丁是有序的具名操作序列——增、删、换、移——各自用指针指向目标,这让它可以在运行前通读、当作差异审阅、在新鲜输入上重放、作为“对数据做了什么、按什么顺序”的审计痕迹归档。重命名在键的层面遵循同样的逻辑:匹配模式的规则作用于模式所在的每一处,且仅此而已——不会出现第四十处手工修改看起来都好、第四十一处才发现漏改的事故。
扁平的键值行是电子表格、差异工具和半个数据管线世界的通用语;嵌套 JSON 是 API 的母语。扁平化器架出去的桥——嵌套压成分隔符连接的键——还原器把回来的桥架好。要紧的保证是往返:压平、还原、与原件深度比较,结构完好即得证明。唯一的前提是冲突检查——含分隔符的键活不过这趟旅程,所以分隔符要对着实际存在的键名来选,而不是凭习惯。
本页重塑结构并证明重塑——不查询取值、不在格式间转换、不认证形状。用查询从 JSON 里拉数据是抽取与转换工作流的事;格式化、校验、合并文档是工具工作流的保健;JSON 转 YAML、CSV、BSON 是转换工作流;把结构变成 TypeScript 类型或 schema 是类型代码与 schema 推断工作流的业务。在这里下刀、验证往返,然后把文档交给拥有下一个问题的邻居。
工作流指南
提取文档的全部键路径,让结构在上纸之后、操作之前可见;把这份清单留作基线,后续验收检查重新生成清单并与之比对。
用 RFC 6901 指针精确定点手术目标,用 JSONPath 或 JMESPath 风格表达式做集合探索——当操作面对的是一类节点而非一个地址时。
按模式与规则批量重命名键,而不是一处一处改;把新增、删除、替换、移动表达成 RFC 6902 补丁序列,每个操作都以指针点名目标。
为吃扁平行的工具把嵌套压成分隔符连接的键值对,回程无损还原嵌套结构——用深度比较验证往返。
一次性、没人回看的修改直接编辑就对;RFC 6902 补丁是具名的有序操作序列,可以在跑之前审阅、在相似输入上回放、在跑完之后做差异对比——改动需要可问责时,选补丁。
JSON Pointer 精确点名一个节点——/data/items/0——而且正是 JSON Patch 自己使用的寻址方言;JSONPath 与 JMESPath 风格表达式用通配与过滤选出集合——操作用指针,探索用路径。
分隔符决定往返能否存活——点号自然,直到键名里有点;斜杠呼应指针语法,直到键名里有斜杠;罕见自定义分隔符两者都躲开,代价是输出眼生——选一个你的键名里不会出现的。