Go 使用 JSON


Encode

將一個對象編碼成 JSON 數據,接受一個 interface{} 對象,返回 []byte 和 err

func Marshal(v interface{}) {[]byte,err}

Marshal 函數將會遞歸遍歷整個對象,依次按照成員類型對這個對象進行編碼,類型轉換如下:

1 bool 類型轉換成 JSON 的 boolean

2 整數、浮點數等數值類型轉換成 JSON 的 Number

3 string 轉換成 JSON 的字符串(帶 "" 號)

4 struct 轉換成 JSON 的 Object ,再根據各個成員的類型遞歸打包

5 數組或切片轉換成 JSON 的 Array

6 []byte 會先進行 base64 編碼然后轉換成 JSON 字符串

7 map 轉換成 JSON 的 Object ,key 必須是 string

8 interface{} 按照內部的實際類型進行轉換

9 channel、func等類型,會返回 UnsupportedTypeError

如下示例:

package main

import (
	"encoding/json"
	"fmt"
	"os"
)

// 定義一個結構體
type ColorGroup struct {
	ID int
	Name string
	Colors []string
}

func main() {
	group := ColorGroup{
		ID : 1,
		Name : "Reds",
		Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
	}

	b,err := json.Marshal(group)
	if err != nil{
		fmt.Println("error:",err)
	}

	os.Stdout.Write(b)
}

----------------------------------------------------------------------------

輸出結果:

{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"]}

Decode

將 JSON 數據解碼

func Unmarshal(data []byte,v interface{}) error

類型轉換規則和上面的規則類似,如下示例:

package main

import (
	"encoding/json"
	"fmt"
)

// func UnMarshal(data []byte,v interface{}) error

type Animal struct {
	Name string
	Order string
}

func main() {
	var animals []Animal
	jsonBlob := `[
	     {"Name" : "Platypus","Order" : "Monotremata"},
	     {"Name": "Quoll",    "Order": "Dasyuromorphia"}
	]`

	err := json.Unmarshal([]byte(jsonBlob),&animals)
	if err != nil {
		fmt.Println("error:",err)
	}

	fmt.Println(animals)
}

------------------------------------------------------------------

輸出結果:

[{Platypus Monotremata} {Quoll Dasyuromorphia}]

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM