當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【Golang】JSON Marshal Unmarshal
生活随笔
收集整理的這篇文章主要介紹了
【Golang】JSON Marshal Unmarshal
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
json.Marshal(v interface{}) ([]byte, error)
- 如果傳入的v是一個(gè) reference,則直接進(jìn)行 marshal
- 如果傳入的v是一個(gè) pointer,則會(huì)將 pointer 中的內(nèi)容解析,再進(jìn)行marshal
json.Unmarshal(data []byte, v interface{}) error
- 如果傳入的v是一個(gè) reference,則匹配相應(yīng)的字段來進(jìn)行 unmarshal
- 如果傳入的v是一個(gè) pointer,則會(huì)報(bào)錯(cuò):json: Unmarshal(nil *srv.Animal)
- 因此如果期望用指針來 unmarshal data []byte,需要將指針指向某一空間,或者封裝為結(jié)構(gòu)體,并用結(jié)構(gòu)體變量的指針當(dāng)作 unmarshal 的入?yún)?v,才能夠正確解析 data 內(nèi)容
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"}總結(jié)
以上是生活随笔為你收集整理的【Golang】JSON Marshal Unmarshal的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7. Java8新特性-并行数据处理(p
- 下一篇: 项目管理(五):WBS