jsoniter简介
为什么要研究这玩意?
发现的一些代码是这样写的:
1 | |
1 | |
可以看到github.com/json-iterator里的包在这里的两个用处:
1 | |
jsoniter简介
性能
一个高性能 100% 兼容的“encoding/json”替代品
性能测试结果如下

使用方法
Replace
1 | |
with
1 | |
Replace
1 | |
with
1 | |
文档
包 jsoniter 实现了 RFC 4627 中定义的 JSON 的编码和解码,并提供了与标准 lib encoding/json 语法相同的接口。 从 encoding/json 转换为 jsoniter 只不过是将包替换为 jsoniter 和变量类型声明(如果有的话)。 jsoniter 接口与使用标准库的代码提供 100% 的兼容性。
“JSON and Go”(https://golang.org/doc/articles/json_and_go.html)描述了 Marshal/Unmarshal 如何在任意或预定义的 json 对象和字节之间进行操作,它适用于 jsoniter.Marshal/Unmarshal。
此外, jsoniter.Iterator 提供了一组不同的接口迭代给定的字节/字符串/读取器并一个一个地产生解析的元素。 这组接口根据需要读取输入并提供更好的性能。
此外:RegisterFuzzyDecoders的作用
1 | |
详见单元测试:
1 | |
重点是下面这个:
1 | |
如果没有调用RegisterFuzzyDecoders会报错:
1 | |
例子
1 | |
运行结果如下:
1 | |
去掉extra.RegisterFuzzyDecoders()会报错,可见RegisterFuzzyDecoders会兼容string转int的情况:
1 | |
加了个In字段测试int转string,发现还是可以正常运行,RegisterFuzzyDecoders还是挺有用的:
1 | |
1 | |
jsoniter简介
https://nrbackback.github.io/2022/02/07/jsoniter简介/