生活随笔
收集整理的這篇文章主要介紹了
Go-json 实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境: Win7_x64 + go1.6.2?
package mainimport "encoding/json"
import "fmt"
import "os"// 我們使用兩個結構體來演示自定義數據類型的JSON數據編碼和解碼。
type Response1 struct {Page intFruits []string
}
type Response2 struct {Page int `json:"page"`Fruits []string `json:"fruits"`
}func main() {// 首先我們看一下將基礎數據類型編碼為JSON數據bolB, _ := json.Marshal(true)fmt.Println(string(bolB))intB, _ := json.Marshal(1)fmt.Println(string(intB))fltB, _ := json.Marshal(2.34)fmt.Println(string(fltB))strB, _ := json.Marshal("gopher")fmt.Println(string(strB))// 這里是將切片和字典編碼為JSON數組或對象slcD := []string{"apple", "peach", "pear"}slcB, _ := json.Marshal(slcD)fmt.Println(string(slcB))mapD := map[string]int{"apple": 5, "lettuce": 7}mapB, _ := json.Marshal(mapD)fmt.Println(string(mapB))// JSON包可以自動地編碼自定義數據類型。結果將只包括自定義// 類型中的可導出成員的值并且默認情況下,這些成員名稱都作// 為JSON數據的鍵res1D := &Response1{Page: 1,Fruits: []string{"apple", "peach", "pear"}}res1B, _ := json.Marshal(res1D)fmt.Println(string(res1B))// 你可以使用tag來自定義編碼后JSON鍵的名稱res2D := &Response2{Page: 1,Fruits: []string{"apple", "peach", "pear"}}res2B, _ := json.Marshal(res2D)fmt.Println(string(res2B))// 現在我們看看解碼JSON數據為Go數值byt := []byte(`{"num":6.13,"strs":["a","b"]}`)// 我們需要提供一個變量來存儲解碼后的JSON數據,這里// 的`map[string]interface{}`將以Key-Value的方式// 保存解碼后的數據,Value可以為任意數據類型var dat map[string]interface{}// 解碼過程,并檢測相關可能存在的錯誤if err := json.Unmarshal(byt, &dat); err != nil {panic(err)}fmt.Println(dat)// 為了使用解碼后map里面的數據,我們需要將Value轉換為// 它們合適的類型,例如我們將這里的num轉換為期望的float64num := dat["num"].(float64)fmt.Println(num)// 訪問嵌套的數據需要一些類型轉換strs := dat["strs"].([]interface{})str1 := strs[0].(string)fmt.Println(str1)// 我們還可以將JSON解碼為自定義數據類型,這有個好處是可以// 為我們的程序增加額外的類型安全并且不用再在訪問數據的時候// 進行類型斷言str := `{"page": 1, "fruits": ["apple", "peach"]}`res := &Response2{}json.Unmarshal([]byte(str), &res)fmt.Println(res)fmt.Println(res.Fruits[0])// 上面的例子中,我們使用bytes和strings來進行原始數據和JSON數據// 之間的轉換,我們也可以直接將JSON編碼的數據流寫入`os.Writer`// 或者是HTTP請求回復數據。enc := json.NewEncoder(os.Stdout)d := map[string]int{"apple": 5, "lettuce": 7}enc.Encode(d)
}
運行結果:
E:\program\go\src\hw>go run h1.go
hello
{"Name":"Alice","Body":"Hello","Time":23} <nil>E:\program\go\src\hw>go run h1.go
true
1
2.34
"gopher"
["apple","peach","pear"]
{"apple":5,"lettuce":7}
{"Page":1,"Fruits":["apple","peach","pear"]}
{"page":1,"fruits":["apple","peach","pear"]}
map[num:6.13 strs:[a b]]
6.13
a
&{1 [apple peach]}
apple
{"apple":5,"lettuce":7}
總結
以上是生活随笔為你收集整理的Go-json 实例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。