連json包變量不加tag會怎麼樣都不知道?年輕人耗子尾汁

問題

json包裏使用的時候,結構體裏的變量不加tag能不能正常轉成json裏的字段?golang

怎麼答

  • 若是變量首字母小寫,則爲private。不管如何不能轉,由於取不到反射信息
  • 若是變量首字母大寫,則爲public面試

    • 不加tag,能夠正常轉爲json裏的字段,json內字段名跟結構體內字段原名一致
    • 加了tag,從structjson的時候,json的字段名就是tag裏的字段名,原字段名已經沒用。

舉例

經過一個例子加深理解。json

package main
import (
    "encoding/json"
    "fmt"
)
type J struct {
    a string             //小寫無tag
    b string `json:"B"`  //小寫+tag
    C string             //大寫無tag
    D string `json:"DD"` //大寫+tag
}
func main() {
    j := J {
      a: "1",
      b: "2",
      C: "3",
      D: "4",
    }
    fmt.Printf("轉爲json前j結構體的內容 = %+v\n", j)
    jsonInfo, _ := json.Marshal(j)
    fmt.Printf("轉爲json後的內容 = %+v\n", string(jsonInfo))
}

輸出數組

轉爲json前j結構體的內容 = {a:1 b:2 C:3 D:4}
轉爲json後的內容 = {"C":"3","DD":"4"}

解釋

  • 結構體裏定義了四個字段,分別對應 小寫無tag小寫+tag大寫無tag大寫+tag
  • 轉爲json後首字母小寫的無論加不加tag都不能轉爲json裏的內容,而大寫的加了tag能夠取別名,不加tagjson內的字段跟結構體字段原名一致

文章推薦:

若是你想天天學習一個知識點?

相關文章
相關標籤/搜索