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简介/