當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【Golang】JSON Marshal Unmarshal
生活随笔
收集整理的這篇文章主要介紹了
【Golang】JSON Marshal Unmarshal
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
json.Marshal(v interface{}) ([]byte, error)
- 如果傳入的v是一個 reference,則直接進行 marshal
- 如果傳入的v是一個 pointer,則會將 pointer 中的內容解析,再進行marshal
json.Unmarshal(data []byte, v interface{}) error
- 如果傳入的v是一個 reference,則匹配相應的字段來進行 unmarshal
- 如果傳入的v是一個 pointer,則會報錯:json: Unmarshal(nil *srv.Animal)
- 因此如果期望用指針來 unmarshal data []byte,需要將指針指向某一空間,或者封裝為結構體,并用結構體變量的指針當作 unmarshal 的入參 v,才能夠正確解析 data 內容
Example
func main() {type Animal struct {Name string}type Human struct {Attr string}animal := Animal{Name: "xixi"}bs1, _ := json.Marshal(animal)fmt.Printf("\nbs1: " + string(bs1))bs2, _ := json.Marshal(&animal)fmt.Printf("\nbs2: " + string(bs2))var (resp1 Animalresp2 struct{ *Animal }resp3 Humanresp4 *Animalresp5 = &Animal{})_ = json.Unmarshal(bs1, &resp1)_ = json.Unmarshal(bs1, &resp2)fmt.Printf("\nresp1: %#v", resp1)fmt.Printf("\nresp2: %#v", resp2.Animal)_ = json.Unmarshal(bs1, &resp3)fmt.Printf("\nresp3: %#v", resp3)if err := json.Unmarshal(bs1, resp4); err != nil {fmt.Printf("\nerr: %s", err.Error())}_ = json.Unmarshal(bs1, resp5)fmt.Printf("\nresp5: %#v", resp5) }// Output // bs1: {"Name":"xixi"} // bs2: {"Name":"xixi"} // resp1: main.Animal{Name:"xixi"} // resp2: &main.Animal{Name:"xixi"} // resp3: main.Human{Attr:""} // err: json: Unmarshal(nil *main.Animal) // resp3: main.Human{Attr:""} // resp5: &main.Animal{Name:"xixi"}總結
以上是生活随笔為你收集整理的【Golang】JSON Marshal Unmarshal的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7. Java8新特性-并行数据处理(p
- 下一篇: angularJS入门与进阶(笔记1)