在golang中使用json


jsoniter高性能json庫

非常快,支持java和go

marshal使用的一些坑

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Id   int `json:"id,string"` //加了這個序列化到json中int類型會被轉換成string類型
    Name string `json:"name"` //加了這個打印出來就是小寫的name
    //age int 如果這里是小寫的age,則序列化之后print無法打印出來,marshal只可以序列化可以導出的屬性
    Age int `json:"age,omitempty"` //加了omitempty之后,如果該值為初始化空值,則不會輸出,因為是int所以這里是0
    Address string `json:"-"` //加了中划線的值是絕對被忽略的
}

func main() {
    var json = jsoniter.ConfigCompatibleWithStandardLibrary //使用jsoniter第三方包替換官方json模塊提升json模塊性能
    u := User{
         Id:   12,
        Name: "Jerry",
        Age:  0,
    }
    data, err := json.Marshal(&u) //data是byte類型
    if err != nil {
        return
    }
    fmt.Println(string(data)) //{"id":"0","name":"Jerry"} //因為Age是0所以被omitempty過濾了,Address被-過濾了
    u2 := &User{}
    json.Unmarshal(data, u2) //反序列化data仍然需要使用byte類型
    fmt.Println(u2) //&User{12 jerry 0} 可以發現Address沒有反序列化,被過濾掉的字段無法反序列化到結構體中
}





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM