Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

Gray-Ice

个人博客兼个人网站

据说jsoniter的速度比golang标准库的速度快,我就来用了。

jsoniter提供的图表(它自己提供的哈,可不是我说的。图片网址是githubusercontent.com,所以国内用户可能看不到这个图):

项目地址

项目中文Wiki(竟然有中文!)。

虽说有了中文Wiki我再写这篇markdown显得有点憨,但我还是写一下吧。

序列化

结构体切片转换成JSON字符串/字节切片 (单个结构体也可以用同样的方法):

注意结构体的字段要大写,不然读取不到。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main

import (
"fmt"

jsoniter "github.com/json-iterator/go"
)

type Menu struct {
Id int
Title string
}

func main() {
var menus []Menu

// 生成测试数据
for i := 0; i < 10; i++ {
menus = append(menus, Menu{Id: i, Title: "title " + fmt.Sprintf("%d", i)})
}

// 打印测试数据
fmt.Println("Struct array:\n", menus)

// 生成json字节数组
res, err := jsoniter.Marshal(&menus)
if err != nil {
panic(err)
}

// 以字节形式打印字节数组
fmt.Println("\nJson bytes: \n", res)

// 直接转换成字符串
string_res, err := jsoniter.MarshalToString(&menus)
if err != nil {
panic(err)
}

// 以字符串格式打印字节数组
fmt.Println("\nJson string: ", string_res)
}

终端输出:

1
2
3
4
5
6
7
8
~/codeSet/goCode/test » go run main.go                                
Struct array:
[{0 title 0} {1 title 1} {2 title 2} {3 title 3} {4 title 4} {5 title 5} {6 title 6} {7 title 7} {8 title 8} {9 title 9}]

Json bytes:
[91 123 34 73 100 34 58 48 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 48 34 125 44 123 34 73 100 34 58 49 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 49 34 125 44 123 34 73 100 34 58 50 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 50 34 125 44 123 34 73 100 34 58 51 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 51 34 125 44 123 34 73 100 34 58 52 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 52 34 125 44 123 34 73 100 34 58 53 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 53 34 125 44 123 34 73 100 34 58 54 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 54 34 125 44 123 34 73 100 34 58 55 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 55 34 125 44 123 34 73 100 34 58 56 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 56 34 125 44 123 34 73 100 34 58 57 44 34 84 105 116 108 101 34 58 34 116 105 116 108 101 32 57 34 125 93]

Json string: [{"Id":0,"Title":"title 0"},{"Id":1,"Title":"title 1"},{"Id":2,"Title":"title 2"},{"Id":3,"Title":"title 3"},{"Id":4,"Title":"title 4"},{"Id":5,"Title":"title 5"},{"Id":6,"Title":"title 6"},{"Id":7,"Title":"title 7"},{"Id":8,"Title":"title 8"},{"Id":9,"Title":"title 9"}]

反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main

import (
"fmt"

jsoniter "github.com/json-iterator/go"
)

type Menu struct {
Id int
Title string
}

func main() {
var menus []Menu

// 生成测试数据
for i := 0; i < 10; i++ {
menus = append(menus, Menu{Id: i, Title: "title " + fmt.Sprintf("%d", i)})
}

// 打印测试数据
fmt.Println("Struct array:\n", menus)

// 直接转换成字符串
string_res, err := jsoniter.MarshalToString(&menus)
if err != nil {
panic(err)
}

// 以字符串格式打印字节数组
fmt.Println("\nJson string: ", string_res)

var ms []Menu // 该变量用于存储反序列化后的结构
// 从字符串形式反序列化(也有从字节数组形式反序列化的)
err = jsoniter.UnmarshalFromString(string_res, &ms)
if err != nil {
panic(err)
}
// 打印反序列化后的数据
fmt.Println("\nDeserialization: \n", ms)
}

输出:

1
2
3
4
5
6
7
Struct array:
[{0 title 0} {1 title 1} {2 title 2} {3 title 3} {4 title 4} {5 title 5} {6 title 6} {7 title 7} {8 title 8} {9 title 9}]

Json string: [{"Id":0,"Title":"title 0"},{"Id":1,"Title":"title 1"},{"Id":2,"Title":"title 2"},{"Id":3,"Title":"title 3"},{"Id":4,"Title":"title 4"},{"Id":5,"Title":"title 5"},{"Id":6,"Title":"title 6"},{"Id":7,"Title":"title 7"},{"Id":8,"Title":"title 8"},{"Id":9,"Title":"title 9"}]

Deserialization:
[{0 title 0} {1 title 1} {2 title 2} {3 title 3} {4 title 4} {5 title 5} {6 title 6} {7 title 7} {8 title 8} {9 title 9}]

还有一些配置JSON的内容我就不写了,因为我暂时用不到: ( 建议看github上的Wiki。

本篇完。

评论



愿火焰指引你