go json解析Marshal和Unmarshal
Posted nyist-xsk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go json解析Marshal和Unmarshal相关的知识,希望对你有一定的参考价值。
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:
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 )
RawMessage :
package main
import (
"encoding/json"
"fmt"
"log"
)
func main ( )
type Color struct
Space string
Point json. RawMessage // delay parsing until we know the color space
type RGB struct
R uint8
G uint8
B uint8
type YCbCr struct
Y uint8
Cb int8
Cr int8
var j = [ ] byte ( ` [
"Space" : "YCbCr" , "Point" : "Y" : 255 , "Cb" : 0 , "Cr" : - 10 ,
"Space" : "RGB" , "Point" : "R" : 98 , "G" : 218 , "B" : 255
] ` )
var colors [ ] Color
err := json. Unmarshal ( j , & colors )
if err != nil
log . Fatalln ( "error:" , err )
for _ , c := range colors
var dst interface
switch c. Space
case "RGB" :
dst = new ( RGB )
case "YCbCr" :
dst = new ( YCbCr )
err := json. Unmarshal ( c. Point , dst )
if err != nil
log . Fatalln ( "error:" , err )
fmt. Println ( c. Space , dst )
Unmarshal:
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 )
以上是关于go json解析Marshal和Unmarshal的主要内容,如果未能解决你的问题,请参考以下文章
golang Marshal / Unmarshal将不同的JSON对象转换为Go结构