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的主要内容,如果未能解决你的问题,请参考以下文章

json 解析:marshal 和 unmarshal

golang Marshal / Unmarshal将不同的JSON对象转换为Go结构

Go语言 Marshal 序列化和反序列化

踩了大坑 : go json.Marshal时,结构体字段需要大写

Go语言处理JSon字段

001-Go JSON处理