Lua 序列化与数据交换格式
梳理 Lua 生态中常用的序列化与数据交换格式:从 string.format 手写序列化、load 反序列化,到 cjson、MessagePack、CBOR 等库的选型与性能对比,并给出游戏存档、配置加载与跨语言通信中的落地建议与安全边界。
tag
梳理 Lua 生态中常用的序列化与数据交换格式:从 string.format 手写序列化、load 反序列化,到 cjson、MessagePack、CBOR 等库的选型与性能对比,并给出游戏存档、配置加载与跨语言通信中的落地建议与安全边界。
JSON 编解码是服务边界上最频繁的一次数据转换,它的性能与健壮性直接决定接口的吞吐和容错能力。circe 用代数数据类型把解析、派生与错误路径都建模成纯函数,jsoniter-scala 则用编译期宏生成无反射的编解码器换取吞吐。本文对比两者的模型与代价,给出派生与自定义的写法、性能实测方法,以及版本演进与向后兼容的实践路径。
本文系统讲解工作流的任务间数据传递与 Schema 演进,回答大数据集该传值还是传引用、Schema 变更怎样不破坏运行中实例、敏感字段如何加密与脱敏。覆盖值传递与 Claim Check 模式、中间结果存储选型、Schema 注册中心与兼容规则、序列化格式的体积与性能对比、事件历史累积治理、字段分级与密钥管理、生命周期清理与契约测试,并给出可落地的代码与配置片段。
本节讲数据写出再读回这条边界上类型如何失真。先说清 JSON.stringify 与 JSON.parse 在类型上的不对称,再列出 Date、BigInt、undefined、NaN、Map、循环引用的失真清单与报错,然后用编解码器 Codec 把线上格式与内存类型显式分开,讲透版本迁移、replacer/reviver 的用法与二进制格式取舍。读完你能为持久化与消息协议设计出类型安全的边界。
存档格式会变:今天的 hp 明天可能改名 health。本节给 helio 内核的 schema 迁移框架:存档里带 $v 版本号,加载时沿迁移链逐级升到当前版本,缺环直接抛错、绝不静默降级。实跑一份 v1 存档升到 v3,字段从 {hp, name, gold} 变成 {health, name, mana, level}。
朴素 JSON.stringify 遇到父子互指的图会抛 TypeError,报错原文是「Converting circular structure to JSON」。本节给出 helio 内核里带 id 表的对象图序列化器:把对象引用替换成整数 id,循环变成两条指向同一 id 的边,两趟重建后引用同一性保持不变;句柄部分复用第 6 章的世代句柄。
第 16 章的类型描述符在这一节接上序列化器:同一张字段表既能写出可读 JSON,也能写出紧凑二进制。给出 helio 内核里可编译的 TypeRegistry、json-serde 与 binary-serde 三个完整文件与 vitest 用例,并实测同一个 Player 对象 JSON 93 字节、二进制 37 字节。
深入讲解 System.Text.Json 的源生成模式、自定义转换器、多态序列化与版本兼容策略,对比 Newtonsoft.Json 的行为差异,并给出 AOT 友好、低分配的序列化工程实践。
序列化是分布式系统与持久化存储的基础设施,选错库会让延迟、体积与可维护性同时受损。本文横向对比 C++ 生态中最常用的序列化方案:文本侧的 nlohmann/json 与 RapidJSON、二进制侧的 Protocol Buffers 与 FlatBuffers/Cap'n Proto,剖析各自的编码格式与零拷贝原理,给出 Schema 演进与向后兼容规则,附上吞吐量、延迟与序列化体积的实测数据,并总结一套可落地的选型决策表。
系统对比 Java 序列化方案:JDK 原生序列化的原理与安全风险、Jackson 与 Gson 等 JSON 方案、Kryo 高性能二进制、Protobuf 结构化方案,给出性能基准对比、适用场景与选型指南。
系统覆盖 Scala 服务的序列化与协议设计:序列化的本质(对象 ↔ 字节)、文本 vs 二进制格式、Circe/JSON 编码实践(ADT 编码、字段命名、非标结构)、upickle 与 Scodec 二进制编码、版本化与 schema 演进(兼容性规则)、跨语言协议(Protobuf/Avro/gRPC)、以及序列化安全(反序列化漏洞、数据大小限制),帮助读者在「可读性」与「性能/兼容性」之间做出正确协议选择。
系统覆盖 Defold 游戏存档系统:存档数据建模(存档状态/进度/设置分层)、序列化方案(JSON/msgpack/二进制)对比、Defold 文件系统(sys.save/load)与存储、存档加密与完整性校验(HMAC/版本戳)、存档版本迁移(字段演进/向后兼容)、自动存档与检查点、以及云存档与跨设备同步的工程实践。
对比主流数据序列化格式:JSON/XML/YAML/TOML 文本族、Protobuf/MessagePack/CBOR/BSON 二进制族、Parquet/ORC 列式族——schema 演进、性能基准、版本兼容与选型决策树。
Zig 标准库的 std.json 提供零依赖的 JSON 解析与序列化。本文系统讲解 Value 解析树、parseFromSlice 到强类型结构体、stringify 序列化、自定义序列化接口(JsonStringify)、容错解析、分配器生命周期与性能考量,以及配置文件/API 通信的实战模式。
系统覆盖 JSON 与 YAML 两大文本数据格式的工程处理:解析器内部原理(词法/语法/递归下降)、流式解析与内存边界、序列化陷阱(浮点/时间/键序)、Schema 校验(JSON Schema/类型契约)、YAML 锚点别名与合并键、格式互转、安全(原型污染/zip 炸弹/别名炸弹)与性能优化。
在 C++ 中实现编译期反射与序列化:结构化绑定展开聚合体、宏方案、Boost.PFR 等现成工具,以及与 Protobuf/FlatBuffers/Cap'n Proto 等二进制序列化方案的性能对比与工程选型。
深度讲解 Go JSON 处理性能:encoding/json 反射开销、jsoniter/easyjson 加速原理、字段 tag 与结构体设计、内存分配优化、Streaming 流式解析,以及大 JSON、高频序列化场景的选型与避坑。
json.dumps/loads 的 ensure_ascii、indent、sort_keys、default 参数与中文坑,csv 的 DictReader/DictWriter、newline 的必要性与 Sniffer,3.11+ 只读的 tomllib,以及序列化安全:pickle 为何不能反序列化不可信数据、yaml.safe_load 与 JSON 的边界。
全面解析Go语言JSON处理技术,涵盖序列化反序列化、结构体标签、自定义编码器、流式处理和性能优化,从标准库到高性能第三方方案完整覆盖