Golang 資料類型轉換
一、struct轉json
方法一
package main
import (
"encoding/json"
"fmt"
)
type Server struct {
ServerName string `json:"serverName,string"`
ServerIP string `json:"serverIP,omitempty"`
}
type Serverslice struct {
Did string
Servers Server `json:"servers"`
}
func main() {
//定義struct變量并複制
var s Serverslice
s.Servers = Server{ServerName: "Beijing_Base", ServerIP: "127.0.02"}
//使用(.屬性名)方法指派
s.Did = "111"
b, err := json.Marshal(s)
if err != nil {
fmt.Println("JSON ERR:", err)
}
fmt.Println(s.Did)
fmt.Println(string(b))
}
輸出結果:
111
{"Did":"111","servers":{"serverName":"\"Beijing_Base\"","serverIP":"127.0.02"}}
方法二
package main
import (
"encoding/json"
"fmt"
"github.com/bitly/go-simplejson"
)
type Auth struct {
With string `json:"with"`
AppKey string
ReqId int
Ts string
Sign string `json:"sign,omitempty"`
}
type ReqBody struct {
Td string `json:"td"` //使用标簽改變Td=》td
Authen Auth
Did string
Mid string `json:"mid,omitempty"`//omitempty屬性:如果該字段為nil或0值(數字0,字元串"",空數組[]等),則打包的JSON結果不會有這個字段
}
func main() {
// 先定義struct變量
var rb ReqBody
var auth0 Auth
//為變量指派
auth0 = Auth{With: "aa_a", AppKey: "2323", ReqId: 1, Ts: "tttsss"}
rb = ReqBody{Td: "1111", Authen: auth0, Did: "11101"}
//修改變量值
rb.Authen.Sign = "GGGGGGGGGGGGG"
rb.Td = "222"
//struct轉json
c, err := json.Marshal(rb)
if err != nil {
fmt.Println("JSON ERR:", err)
}
d := string(c)
fmt.Println(d)
//使用simplejson包可以直接.Get()方法取值(入參為[]byte)
x, err := simplejson.NewJson([]byte(d))
re := *x.Get("Did")
fmt.Println(re)
//寫成方法
setbody(rb)
}
func setbody(ax interface{}) {
jm, _ := json.Marshal(ax)
fmt.Println(string(jm))
}
輸出結果
{"td":"222","Authen":{"with":"aa_a","AppKey":"2323","ReqId":1,"Ts":"tttsss","sign":"GGGGGGGGGGGGG"},"Did":"11101"}
{11101}
{"td":"222","Authen":{"with":"aa_a","AppKey":"2323","ReqId":1,"Ts":"tttsss","sign":"GGGGGGGGGGGGG"},"Did":"11101"}
二、簡單json轉map
package main
import (
"encoding/json"
"fmt"
)
func main() {
json_str := "{\"IP\": \"127.0.0.1\", \"name\": \"SKY\"}"
by := []byte(json_str)
m := make(map[string]string)
errs := json.Unmarshal(by, &m)
if errs != nil {
fmt.Println("Umarshal failed:", errs)
return
}
fmt.Println("m:",m)
fmt.Println("m.ip:", m["IP"])
}
結果如下
m: map[IP:127.0.0.1 name:SKY]
m.ip: 127.0.0.1
例二
package main
import (
"encoding/json"
"fmt"
)
func main() {
json_str := "{\"device\": \"1\",\"data\": [{\"humidity\": \"27\",\"time\": \"2017-07-03 15:23:12\"}]}"
m := make(map[string]interface{})
err := json.Unmarshal([]byte(json_str), &m)
fmt.Println(err)
if err != nil {
fmt.Println(err)
} else {
fmt.Println(m["device"])
data := m["data"]
if v, ok := data.([]interface{})[0].(map[string]interface{}); ok {
fmt.Println(ok, v["humidity"], v["time"])
}
}
}
執行結果
<nil>
1
true 27 2017-07-03 15:23:12