go语言之进阶篇json解析到结构体,Unmarshal使用

1、json解析到结构体

示例:

packagemain

import(

"encoding/json"

"fmt"

)

typeITstruct{

Company string `json:"company"`

Subjects []string `json:"subjects"`//二次编码

IsOk bool `json:"isok"`

Price float64 `json:"price"`

}

funcmain() {

jsonBuf := `

{

"company":"itcast",

"subjects": [

"Go",

"C++",

"Python",

"Test"

],

"isok": true,

"price": 666.666

}`

vartmp IT//定义一个结构体变量

err := json.Unmarshal([]byte(jsonBuf), &tmp)//第二个参数要地址传递

iferr != nil {

fmt.Println("err = ", err)

return

}

//fmt.Println("tmp = ", tmp)

fmt.Printf("tmp = %+v\n", tmp)

}

执行结果:

1

tmp = {Company:itcast Subjects:[Go C++ Python Test] IsOk:true Price:666.666}

  

示例2: 定义结构体,解析你想生成的字段

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

44

45

46

47

48

49

packagemain

import(

"encoding/json"

"fmt"

)

typeITstruct{

Company string `json:"company"`

Subjects []string `json:"subjects"`//二次编码

IsOk bool `json:"isok"`

Price float64 `json:"price"`

}

funcmain() {

jsonBuf := `

{

"company":"itcast",

"subjects": [

"Go",

"C++",

"Python",

"Test"

],

"isok": true,

"price": 666.666

}`

vartmp IT//定义一个结构体变量

err := json.Unmarshal([]byte(jsonBuf), &tmp)//第二个参数要地址传递

iferr != nil {

fmt.Println("err = ", err)

return

}

typeIT2struct{

Subjects []string `json:"subjects"`//二次编码

}

vartmp2 IT2

err = json.Unmarshal([]byte(jsonBuf), &tmp2)//第二个参数要地址传递

iferr != nil {

fmt.Println("err = ", err)

return

}

fmt.Printf("tmp2 = %+v\n", tmp2)

}

执行结果:

1

tmp2 = {Subjects:[Go C++ Python Test]}