[GO]通過結構體生成json


package main

import (
    "encoding/json"
    "fmt"
)

type IT struct { //一定要注意這里的成員變量的名字首字母必須是大寫
    Company string
    Subjects []string
    Isok bool
    Price float64
}

func main() {
    s := IT{"zyg", []string{"go", "python", "java"}, true, 3.14}//json的初始化
    buf, err := json.Marshal(s)//使用這個函數會返回兩個值,通過源碼得知
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    fmt.Println("buf = ", string(buf)) //注意這里生成的buf是一個byte切片,如果直接打印會是一串數字,這里使用string函數進行轉化
}

執行的結果為

buf =  {"Company":"zyg","Subjects":["go","python","java"],"Isok":true,"Price":3.14}

這樣可讀性不太好,如果用於展示可以使用這個函數

buf, err := json.MarshalIndent(s, "", "    ")

執行的結果就會好看一些

buf =  {
    "Company": "zyg",
    "Subjects": [
        "go",
        "python",
        "java"
    ],
    "Isok": true,
    "Price": 3.14
}

 當然這樣的結果對於開發數據交換里可以會有問題,比如在Isok那一欄里就有可能別人需要的是“true",而不是true,那這樣就可以使用_struct_tag方式

將結構體變更為這樣的方式

type IT struct {
    Company string `json:"-"` //這樣的方式可以讓這個頭不顯示
    Subjects []string `json:"subjects"` //這種方式二次編碼
    Isok bool `json:",string"` //將一欄的值顯示為string類型
    Price float64
}

執行的結果為

buf =  {
    "subjects": [ //這里變更為小寫了
        "go",
        "python",
        "java"
    ],
    "Isok": "true", //這里變更為字符串了
    "Price": 3.14
}

company也沒有再顯示了

 


免責聲明!

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



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