golang string轉json的一些坑


 

 

先帶來點冷知識,不知道大家知不知道,反正我剛知道...

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

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

但是golang還支持另外一個符號,我初學時候以為是單引號,但其實不是,是esc鍵下邊那個,那么賦值帶雙引號的字符串就如下就行了:

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

進入正題

先看一段代碼,起作用是把字符串轉換為結構體對應的json

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)
	}
}

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

 

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

鼠標放上去顯示的是:

大家都知道,golang中變量聲明成大寫和小寫能引用的范圍是不一樣的,那我就想了,大小寫問題???一臉懵逼把變量名首字母改成了大寫,然后...就行了,代碼變成了下邊這樣:

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!!!

golang有很多奇奇怪怪的特性,歡迎各位大佬挖掘討論。


免責聲明!

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



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