Golang json用法詳細(一)

3083 ワード

Golang json用法詳細(一)
概要
jsonフォーマットは私たちが日常的に最もよく使うシーケンス化フォーマットの一つと言える.Go言語はGoogleが開発したインターネットと呼ばれるC言語として、自然とJSONフォーマットにもよくサポートされている.しかし、Go言語は強いタイプの言語であり、フォーマットに対する要求は極めて厳しく、JSONフォーマットにもタイプがあるが、安定していない.だから本編の主な目的は
  • はGolang解析jsonのほとんどの能力を掘り起こす
  • である.
  • 比較的優雅な解決jsonを解析する際に存在する様々な問題
  • Golangがjsonを解析する過程
  • に深く入り込む
    Golang解析JSONのTag編
  • 構造体が正常にシーケンス化された後はどのようなものですか.
    package main
    import (
        "encoding/json"
        "fmt"
    )
    
    // Product     
    type Product struct {
        Name      string
        ProductID int64
        Number    int
        Price     float64
        IsOnSale  bool
    }
    
    func main() {
        p := &Product{}
        p.Name = "Xiao mi 6"
        p.IsOnSale = true
        p.Number = 10000
        p.Price = 2499.00
        p.ProductID = 1
        data, _ := json.Marshal(p)
        fmt.Println(string(data))
    }
    
    
    //  
    {"Name":"Xiao mi 6","ProductID":1,"Number":10000,"Price":2499,"IsOnSale":true}
  • Tagとは何ですか.tagはラベルです.構造体の各フィールドにラベルを付けます.ラベルの冒頭はタイプで、後ろはラベル名です.``// Product _ type Product struct { Name string json:“name”ProductID int64 json:“-”// Number int json:“number”Price float64 json:“price”IsOnSale bool json:“is_on_sale,string”`}//シーケンス化後、{“name”:“Xiao mi 6”、“number”:10000、“price”:2499、“is_on_sale”:“false”}``
  • が見えます
  • omitempty,tagにomitempyを加えると,シーケンス化時に0値または空の値``package main import("encoding/json""fmt")/Product_を無視できる.type Product struct{Name string json:"name" ProductID int 64 json:"product_id,omitempty" Number int json:"number" Price float 64 json:"price" IsOnSale bool json:"is_on_sale,omitempty"}funcmain(){p:=&Product{}p.Name="Xiao mi 6"p.IsOnSale=false p.Number=10000 p.Price=2499.00 p.ProductID=0
     data, _ := json.Marshal(p)
     fmt.Println(string(data))
    }//結果{"name":"Xiao mi 6","number":10000,"number":10000,""","number":10000,10000,10000 p.Price=2499.00 p.Price=2499.000 p.Price=2499.000 p.ProductID=2424price:2499} ```
  • type、時には、シーケンス化または逆シーケンス化の場合、構造体タイプと必要なタイプが一致しない可能性があります.この場合、string、number、boolean``package main import(「encoding/json」「fmt」)/Product_を指定し、サポートできます.type Product struct{Name string json:"name" ProductID int 64 json:"product_id,string" Number int json:"number,string" Price float 64 json:"price,string" IsOnSale bool json:"is_on_sale,string"}func main(){
     var data = `{"name":"Xiao mi 6","product_id":"10","number":"10000","price":"2499","is_on_sale":"true"}`
     p := &Product{}
     err := json.Unmarshal([]byte(data), p)
     fmt.Println(err)
     fmt.Println(*p)
    }//結果{Xiao mi 6 10,000 2499 true}``
  • 転載先:https://www.cnblogs.com/yangshiyu/p/6942414.html