Golang 菜鳥(niǎo)教程

Golang 控制語(yǔ)句

Golang 函數(shù) & 方法

Golang 結(jié)構(gòu)體

Golang 切片 & 數(shù)組

Golang 字符串(String)

Golang 指針

Golang 接口

Golang 并發(fā)

Golang 異常(Error)

Golang 其他雜項(xiàng)

Go 語(yǔ)言JSON

Go具有對(duì)JSON編碼和解碼的內(nèi)置支持。它還支持自定義數(shù)據(jù)類型。

Marshal函數(shù)用于將go數(shù)據(jù)類型轉(zhuǎn)換為JSON格式。

Marshal函數(shù)的語(yǔ)法為:

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

Marshal返回v的JSON編碼。

布爾值轉(zhuǎn)換為JSON布爾值。浮點(diǎn)數(shù),整數(shù)和數(shù)字將轉(zhuǎn)換為JSON數(shù)字。Map的鍵類型必須是字符串,整數(shù)類型或?qū)崿F(xiàn)encoding.TextMarshaler。

JSON的解碼是使用Unmarshal函數(shù)完成的。

Unmarshal函數(shù)的語(yǔ)法為:

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

Unmarshal解碼JSON編碼的值,并將結(jié)果存儲(chǔ)在v指向的值中。如果v為nil或不是指針,則Unmarshal返回InvalidUnmarshalError。

我們還可以自定義存儲(chǔ)在struct字段標(biāo)簽中“ json”鍵下的字段。我們可以使用該字段的名稱,然后是逗號(hào)分隔的選項(xiàng)列表。

Field int 'json:"myName"' // 在JSON中顯示為鍵“ myName”。
Field int 'json:"myName,omitempty?'//如果該字段的值為空,則從該對(duì)象中省略該字段,
Field int 'json:"-"' ////字段被這個(gè)包忽略。

Go JSON示例1

package main
import "encoding/json"
import "fmt"

func main() {
	bolType, _ := json.Marshal(false) //布爾值
	fmt.Println(string(bolType))
	intType, _ := json.Marshal(10) // 整數(shù)值
	fmt.Println(string(intType))
	fltType, _ := json.Marshal(3.14) //浮點(diǎn)值
	fmt.Println(string(fltType))
	strType, _ := json.Marshal("nhooo") // 字符串值
	fmt.Println(string(strType))
	slcA := []string{"sun", "moon", "star"} //切片值
	slcB, _ := json.Marshal(slcA)
	fmt.Println(string(slcB))
	mapA := map[string]int{"sun": 1, "moon": 2} //map值
	mapB, _ := json.Marshal(mapA)
	fmt.Println(string(mapB))
}

輸出:

false
10
3.14
"nhooo"
["sun","moon","star"]
{"moon":2,"sun":1}

Go JSON示例2(用戶定義的數(shù)據(jù)類型)

package main

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

type Response1 struct {
	Position   int
	Planet []string
}
type Response2 struct {
	Position   int      'json:"position"'
	Planet []string 'json:"planet"'
}

func main()  {
	res1A := &Response1{
		Position:   1,
		Planet: []string{"mercury", "venus", "earth"}}
	res1B, _ := json.Marshal(res1A)
	fmt.Println(string(res1B))

	res2D := &Response2{
		Position:   1,
		Planet: []string{"mercury", "venus", "earth"}}
	res2B, _ := json.Marshal(res2D)
	fmt.Println(string(res2B))


	byt := []byte('{"pi":6.13,"place":["New York","New Delhi"]}`)
	var dat map[string]interface{}
	if err := json.Unmarshal(byt, &dat); err != nil {
		panic(err)
	}
	fmt.Println(dat)
	num := dat["pi"].(float64)
	fmt.Println(num)
	strs := dat["place"].([]interface{})
	str1 := strs[0].(string)
	fmt.Println(str1)
	
	
	str := `{"Position": 1, "Planet": ["mercury", "venus"]}`
	res := Response2{}
	json.Unmarshal([]byte(str), &res)
	fmt.Println(res)
	fmt.Println(res.Planet[1])
	enc := json.NewEncoder(os.Stdout)
	d := map[string]string{"1":"mercury" , "2": "venus"}
	enc.Encode(d)

}

輸出:

{"Position":1,"Planet":["mercury","venus","earth"]}
{"position":1,"planet":["mercury","venus","earth"]}
map[pi:6.13 place:[New York New Delhi]]
6.13
New York
{1 [mercury venus]}
venus
{"1":"mercury","2":"venus"}
丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清