golang生成JSON及び解析JSON

3117 ワード

一、JSONは構造体に解析します.
この部分を紹介する前に、Jsonの文法を簡単に紹介します.
JSON文法はJavaScript文法のサブセットです.JSON文法はJavaScriptの対象がフランス語法のサブセットを表しています.
データは名前/値ペアの中で、コンマ区切りの大かっこで保存されます.括弧保存配列1.JSON名前/値ペア
「name」:「value」
2.JSON値は、
数値(整数または浮動小数)文字列(二重引用符)論理値(trueまたはfalse)配列(中かっこ)のオブジェクト(大括弧内)null
  • JSONデータJSON数字は、整数または浮動小数点型
  • であり得る.
    {「age」:30}
  • JSONオブジェクトJSONは、大括弧({}に、オブジェクトは複数の名前/値ペアを含むことができます.
    {
        "name": "runoob",
        "alexa": 10000,
        "sites": {
            "site1": "www.runoob.com",
            "site2": "m.runoob.com",
            "site3": "c.runoob.com"
        }
    }
    
  • JSON配列は中かっこに書いてあります.配列は複数のオブジェクトを含みます.
  • {
        "sites": [
            {
                "name": "    ",
                "url": "www.runoob.com"
            },
            {
                "name": "google",
                "url": "www.google.com"
            },
            {
                "name": "  ",
                "url": "www.weibo.com"
            }
        ]
    }
    
  • JSONブール値
  • {flags”:true}
  • 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.1 name:SKY]name:SKY IP:127..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))
    }