golang如何生成JSON及解析JSON


本文摘自php中文网,作者藏色散人,侵删。

下面由golang教程栏目给大家介绍golang生成JSON及解析JSON,希望对需要的朋友有所帮助!

一、JSON解析到结构体

在介绍这部分之前先简要介绍一下Json语法

JSON 语法是 JavaScript 语法的子集。JSON 语法是 JavaScript 对象表示法语法的子集。

数据在名称/值对中
数据由逗号分隔
大括号保存对象
中括号保存数组
1.JSON名称/值对

"name" : "value"

2.JSON值
可以是:

数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组(在中括号中)
对象(在大括号中)
null

  1. JSON数据
    JSON 数字可以是整型或者浮点型

{ "age":30 }

  1. JSON对象
    JSON 对象在大括号({})中书写:
    对象可以包含多个名称/值对:

1

2

3

4

5

6

7

8

9

{

    "name": "runoob",

    "alexa": 10000,

    "sites": {

        "site1": "www.runoob.com",

        "site2": "m.runoob.com",

        "site3": "c.runoob.com"

    }

}

  1. JSON数组
    JSON 数组在中括号中书写:
    数组可包含多个对象:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

{

    "sites": [

        {

            "name": "菜鸟教程",

            "url": "www.runoob.com"

        },

        {

            "name": "google",

            "url": "www.google.com"

        },

        {

            "name": "微博",

            "url": "www.weibo.com"

        }

    ]

}

  1. JSON布尔值

{ "flag":true }

  1. JSON null

{ "runoob":null }

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

//JSON解析到结构体

package main

import (

    "encoding/json"

    "fmt"

    "os"

)

type Server struct {

    ServerName string

    ServerIP   string

}

type Serverslice struct {

    Servers []Server

}

func main() {

    var s Serverslice

    str := `{"servers":

   [{"serverName":"Guangzhou_Base","serverIP":"127.0.0.1"},

   {"serverName":"Beijing_Base","serverIP":"127.0.0.2"}]}`

    err:=json.Unmarshal([]byte(str), &s)

    if err!=nil{

        fmt.Println(err)

    }

    fmt.Println(s)

    fmt.Println(s.Servers[0].ServerName)

}

二、JSON转map

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

package main

  

  

import (

    "fmt"

    "encoding/json"

)

  

func main() {

  

    b := []byte(`{"IP": "127.0.0.1", "name": "SKY"}`)

  

    m := make(map[string]string)

  

    err := json.Unmarshal(b, &m)

    if err != nil {

  

        fmt.Println("Umarshal failed:", err)

        return

    }

  

  

    fmt.Println("m:", m)

  

    for k,v :=range m {

        fmt.Println(k, ":", v)

    }

}

输出结果:

m: map[IP:127.0.0.1 name:SKY]
name : SKY
IP : 127.0.0.1

三、生成JSON

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package main

import (

    "encoding/json"

    "fmt"

)

type Server struct {

    ServerName string `json:"serverName,string"`

    ServerIP   string `json:"serverIP,omitempty"`

}

type Serverslice struct {

    Servers []Server `json:"servers"`

}

func main() {

    var s Serverslice

    s.Servers = append(s.Servers, Server{ServerName: "Guangzhou_Base", ServerIP: "127.0.0.1"})

    s.Servers = append(s.Servers, Server{ServerName: "Beijing_Base", ServerIP: "127.0.02"})

    b, err := json.Marshal(s)

    if err != nil {

        fmt.Println("JSON ERR:", err)

    }

    fmt.Println(string(b))

}

以上就是golang如何生成JSON及解析JSON的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang 架构设计原则 接口隔离原则

golang无法解析json怎么办?

分享go命名规范小记

golang在各平台下交叉编译

golang如何退出进程?

golang二维切片初始化

go语言的时间获取

golang适合web开发吗?

详解golang中方法的receiver为指针和不为指针的区别

golang 如何开启协程

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...