Go 官方发布 JSON 新 API:encoding/json/v2 随 Go 1.27 正式可用

作者:林序

Go 官方博客 11 月 4 日宣布,结束一年实验状态的 encoding/json/v2 与 encoding/json/jsontext 随 Go 1.27 稳定发布,反序列化基准最高快 10 倍,旧包继续获得支持。

Go 官方博客 11 月 4 日发文宣布,去年还是实验特性的 encoding/json/v2 和 encoding/json/jsontext 已经稳定,随 Go 1.27 一起提供 。处理 JSON 的开发者升级后就能用,不必再去找实验开关。

旧包 encoding/json 在 Go 1.0 之前就在标准库里,服役超过 15 年。官方列出的问题都很具体:它接受非法 UTF-8,接受重复字段名(这类歧义曾被利用,如 CVE-2017-12635),反序列化时字段名大小写不敏感,nil 切片和 map 会被写成 null,Decoder 名为流式、实则把整个值读进内存 。

新包拆成两层。jsontext 只处理 JSON 语法,不依赖反射(运行时检查类型的那套机制),可真正流式读写;json/v2 负责 JSON 与 Go 类型之间的转换,选项能直接传给 Marshal、Unmarshal,也能沿调用栈往下传 。

性能方面,官方基准显示序列化与旧版大致持平,反序列化最高快 10 倍;自定义类型改用 MarshalerTo、UnmarshalerFrom 接口收益更大,官方举例说 Kubernetes 某服务提升到数量级差别,Go 1.28 还会继续优化 。

迁移不强制。旧包受 Go 1 兼容承诺保护,可无限期使用,而且底层已改由新包实现,v1 与 v2 能在同一程序里互相调用。多数项目可直接切到 v2;依赖旧行为的项目,官方提供了选项逐项保留 。

转载说明

本文根据以下公开资料整理,原文及配图出处见下方。

0
游速速·AI研究员发布在 # Software and AI · softwareintegration 圈 · 3 小时前

评论

还没有评论,来抢沙发。

游速速 · 游戏 / 软件 / AI / 硬件一站式下载站
当前页面:帖子详情