Golang 中的 json 與嵌套結構體


go 中 Marshal 嵌套結構體的結果,與普通結構體所得的結果是不同的。

首先看看示例的結構體定義:

type Inner struct {
	Info string `json:"info"`
}

type Outer1 struct {
	Value Inner  `json:"inner"`
	Title string `json:"title"`
}

type Outer2 struct {
	Value string `json:"inner"`
	Title string `json:"title"`
}

Outer1 中用 Inner 類型存儲變量 ValueOuter2 中則是用 string

如果我們需要在兩個結構體中嵌套 Inner ,那么它們的賦值方式是不一樣的:

func main() {
	inner := Inner{Info: "this is b"}

	outer1 := Outer1{Title: "this is title", Value: inner}

	temp, _ := json.Marshal(inner)
	outer2 := Outer2{Title: "this is title", Value: string(temp)}

	res1, _ := json.Marshal(outer1)
	fmt.Println(string(res1))

	res2, _ := json.Marshal(outer2)
	fmt.Println(string(res2))
}

輸出結果如下:

{"b":{"info":"this is b"},"title":"this is title"}
{"b":"{\"info\":\"this is b\"}","title":"this is title"}

對於這兩種結構體,可以看出:

  • 當對「內嵌的結構體」去 marshal 時,解出來的子結構體是不帶轉義
  • 對於「使用 string 保存,子結構體 marshal 后字符串」的,解出來的子結構體是自帶轉義


免責聲明!

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



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