美文网首页
golang之Json

golang之Json

作者: 10xjzheng | 来源:发表于2019-10-14 19:53 被阅读0次

    1. json字符串解析: json.Unmarshal(b, &f)

    • json字符串解析到结构体中:
    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Server struct {
        ServerName string
        ServerIP   string
    }
    
    type Serverslice struct {
        Servers []Server
    }
    
    func main() {
        var s Serverslice
        str := `{"servers":[{"serverName":"Shanghai_VPN","serverIP":"127.0.0.1"},{"serverName":"Beijing_VPN","serverIP":"127.0.0.2"}]}`
        err := json.Unmarshal([]byte(str), &s)
        if err != nil {
            fmt.Println(err)
        } else {
            fmt.Printf("%T, %v \n", s, s)
            for _, item := range s.Servers {
                fmt.Println(item)
            }
        }
    }
    

    输出结果:

    main.Serverslice, {[{Shanghai_VPN 127.0.0.1} {Beijing_VPN 127.0.0.2}]} 
    {Shanghai_VPN 127.0.0.1}
    {Beijing_VPN 127.0.0.2}
    
    • json字符串直接解析到map中:
    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    func main() {
        b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)
        var f map[string]interface{}
        err := json.Unmarshal(b, &f)
        if err != nil {
            fmt.Println(err)
        }
        fmt.Printf("type: %T, value: %v\n", f["Age"], f["Age"])
        fmt.Printf("type: %T, value: %v\n", f["Parents"], f["Parents"])
    }
    

    输出:

    type: float64, value: 6
    type: []interface {}, value: [Gomez Morticia]
    
    • 直接解析,不用结构体也不用map
      使用以下的json包:
      go get -u github.com/tidwall/gjson
      示例代码:
    package main
    
    import (
        "fmt"
        "github.com/tidwall/gjson"
    )
    
    func main() {
        str := `{"name": "shanhuhai", "sex": 1,"height": 175, "classmate": ["王小五","赵小六","白小七"]}`
    
        name := gjson.Get(str, "name")
        classmate := gjson.Get(str, "classmate")
        fmt.Println(name)
    
        if classmate.IsArray() {
            fmt.Println(classmate.Array()[0])
            fmt.Println(classmate.Array()[1])
            fmt.Println(classmate.Array()[2])
        }
    }
    

    输出:

    shanhuhai
    王小五
    赵小六
    白小七
    

    2.生成Json:json.Marshal(s)

    • 结构体转json
    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    type Server struct {
        ServerName string
        ServerIP   string
    }
    
    type Serverslice struct {
        Servers []Server
    }
    
    func main() {
        var s Serverslice
        s.Servers = append(s.Servers, Server{ServerName: "Shanghai_VPN", ServerIP: "127.0.0.1"})
        s.Servers = append(s.Servers, Server{ServerName: "Beijing_VPN", ServerIP: "127.0.0.2"})
        b, err := json.Marshal(s)
        if err != nil {
            fmt.Println("json err:", err)
        }
        fmt.Println(string(b))
    }
    

    输出:

    {"Servers":[{"ServerName":"Shanghai_VPN","ServerIP":"127.0.0.1"},{"ServerName":"Beijing_VPN","ServerIP":"127.0.0.2"}]}
    
    • map直接转json
    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    func main() {
        var m = map[string]interface{} {"age":20, "name":"lili", "gender":"女"}
        b, err := json.Marshal(m)
        if err != nil {
            fmt.Println("json err:", err)
        }
        fmt.Println(string(b))
    }
    

    输出:

    {"age":20,"gender":"女","name":"lili"}
    

    相关文章

      网友评论

          本文标题:golang之Json

          本文链接:https://www.haomeiwen.com/subject/wjkdmctx.html