golang string轉json的一些坑

 

 

先帶來點冷知識,不知道你們知不知道,反正我剛知道...

大佬們都知道怎麼在string中給string類型賦值帶雙引號的字符串,沒錯就是用反斜槓,以下:golang

msg := "{\"name\":\"zhangsan\", \"age\":18, \"id\":122463, \"sid\":122464}"

可是golang還支持另一個符號,我初學時候覺得是單引號,但其實不是,是esc鍵下邊那個,那麼賦值帶雙引號的字符串就以下就好了:json

ret := `{"access_token":"uAUS6o5g-9rFWjYt39LYa7TKqiMVsIfCGPEN4IZzdAk5-T-ryVhL7xb8kYciuU_m","expires_in":7200}`

進入正題

先看一段代碼,起做用是把字符串轉換爲結構體對應的json3d

type people struct {
	name string `json:"name"`
	age  int    `json:"age"`
	id   int    `json:"id"`
}

type student struct {
	people
	id int `json:"sid"`
}

func main() {
	msg := "{\"name\":\"zhangsan\", \"age\":18, \"id\":122463, \"sid\":122464}"
	var someOne student
	if err := json.Unmarshal([]byte(msg), &someOne); err == nil {
		fmt.Println(someOne)
		fmt.Println(someOne.people)
	} else {
		fmt.Println(err)
	}
}

仔細看看,有沒有錯?我只能說,這樣是輸出不出來答案的,賦值錯誤,看下面的運行結果:code

 

傷腦筋啊,我仔細看了半天,發如今定義的people和student兩個結構體下邊有綠色的波浪線(我用的vscode),像下邊這樣:blog

鼠標放上去顯示的是:token

你們都知道,golang中變量聲明成大寫和小寫能引用的範圍是不同的,那我就想了,大小寫問題???一臉懵逼把變量名首字母改爲了大寫,而後...就好了,代碼變成了下邊這樣:ci

type people struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
	ID   int    `json:"id"`
}

type student struct {
	people
	ID int `json:"sid"`
}

func main() {
	msg := "{\"name\":\"zhangsan\", \"age\":18, \"id\":122463, \"sid\":122464}"
	var someOne student
	if err := json.Unmarshal([]byte(msg), &someOne); err == nil {
		fmt.Println(someOne)
		fmt.Println(someOne.people)
	} else {
		fmt.Println(err)
	}
}

輸出的結果這樣:字符串

bingo!!!string

golang有不少奇奇怪怪的特性,歡迎各位大佬挖掘討論。class

相關文章
相關標籤/搜索