golang生成JSON以及解析JSON

一、JSON解析到結構體

在介紹這部分之前先簡要介紹一下Json語法

JSON 語法是 JavaScript 語法的子集。JSON 語法是 JavaScript 對象表示法語法的子集。

  • 數據在名稱/值對中
  • 數據由逗號分隔
  • 大括號保存對象
  • 中括號保存數組

1.JSON名稱/值對

"name" : "value"

2.JSON值

可以是:

  • 數字(整數或浮點數)
  • 字符串(在雙引號中)
  • 邏輯值(true 或 false)
  • 數組(在中括號中)
  • 對象(在大括號中)
  • null

3.JSON數據

JSON 數字可以是整型或者浮點型

{ "age":30 }

4.JSON對象

JSON 對象在大括號({})中書寫:

對象可以包含多個名稱/值對:

{
    "name": "runoob",
    "alexa": 10000,
    "sites": {
        "site1": "www.runoob.com",
        "site2": "m.runoob.com",
        "site3": "c.runoob.com"
    }
}

5.JSON數組

JSON 數組在中括號中書寫:

數組可包含多個對象:

{
    "sites": [
        {
            "name": "菜鳥教程",
            "url": "www.runoob.com"
        },
        {
            "name": "google",
            "url": "www.google.com"
        },
        {
            "name": "微博",
            "url": "www.weibo.com"
        }
    ]
}

6.JSON佈爾值

{ "flag":true }

7.JSON null

{ "runoob":null }

Json解析到結構體

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

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

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))
}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: