go json解析Marshal和Unmarshal

来源:互联网 发布:java零基础入门书籍 编辑:程序博客网 时间:2024/06/06 04:29

go语言提供一个json解析的包。见 http://golang.org/pkg/encoding/json/

官方同时提供了一篇文章 JSON and Go 讲述json包的用法, 该文章同时存在中文翻译: JSON与Go 。

看过上述两篇文章后,基本使用应该就没问题了。

同时,贴几个官方的例子,方便理解。

Decoder

package main import (     "encoding/json"     "fmt"     "io"     "log"     "strings" ) func main ( ) {     const jsonStream = `         { "Name" : "Ed" , "Text" : "Knock knock." }         { "Name" : "Sam" , "Text" : "Who's there?" }         { "Name" : "Ed" , "Text" : "Go fmt." }         { "Name" : "Sam" , "Text" : "Go fmt who?" }         { "Name" : "Ed" , "Text" : "Go fmt yourself!" }     `     type Message struct {         Name , Text string     }     dec := json. NewDecoder ( strings. NewReader ( jsonStream ) )     for {         var m Message         if err := dec. Decode ( & m ) ; err == io. EOF {             break         } else if err != nil {             log . Fatal ( err )         }         fmt. Printf ( "%s: %s \n " , m. Name , m. Text )     } }

Marshal序列化json格式

package main import (     "encoding/json"     "fmt"     "os" ) func main ( ) {     type ColorGroup struct {         ID     int         Name   string         Colors [ ] string     }     group := ColorGroup {         ID :     1 ,         Name :   "Reds" ,         Colors : [ ] string { "Crimson" , "Red" , "Ruby" , "Maroon" } ,     }     b , err := json. Marshal ( group )     if err != nil {         fmt. Println ( "error:" , err )     }     os. Stdout . Write ( b ) }

Unmarshal 反序列化json格式

package main import (     "encoding/json"     "fmt" ) func main ( ) {     var jsonBlob = [ ] byte ( ` [         { "Name" : "Platypus" , "Order" : "Monotremata" } ,         { "Name" : "Quoll" ,     "Order" : "Dasyuromorphia" }     ] ` )     type Animal struct {         Name  string         Order string     }     var animals [ ] Animal     err := json. Unmarshal ( jsonBlob , & animals )     if err != nil {         fmt. Println ( "error:" , err )     }     fmt. Printf ( "%+v" , animals ) }

原文:http://studygolang.com/articles/6742

0 0