GoLand Json 解析

GoLnand 這門語言 比較特殊,靠標誌符的大小寫來決定訪問域,而不是像傳統java,c++那樣使用關鍵字限定訪問。

看個例子:
這裏定義了一個解析結構體

type Response struct {
code int64
msg string
data string
}

執行json解析
func main() {
var resp Response
err:=json.Unmarshal([]byte(` {"code":200,"msg":"success","data":"Macbook Pro 2018 款"}`),&resp)
if err !=nil {
return
}else {
fmt.Println(resp)
}
}



然而json數據並沒有成功解析到變量resp 中 ,爲什麼會這樣呢?

剛剛說到了 GoLand是以字母大小寫來限定訪問域的 只有首字母大寫纔可以被導出(可以理解爲 public ),子現在我們把 Response 改成這樣 ,首字母大寫 ,再來看看結果

type Response struct {

Code int64
Msg string
Data string

}


json數據成功解析了出來

這裏有人可能注意到了 ,sutruct 裏面的字段 和 json 字符串中的字段並不一致 。這裏就是 GoLang json解析包 自動匹配的結果了(這裏的自動匹配 是指不區分大小 ,但是字母還是要一樣的),不信我們試試

這裏我把字符串對應的字段 改成了這樣


運行 結果

那json 字段是否可以不合struct 字段匹配呢? 當然也是可以的。

可以通過tag 指定 映射字段。
修改一下結構體:

type Response struct {

Code int64 `json:"status"`
Msg string `json:"message"`
Data string `json:"data"`

}
修改json 數據:


最後也是可以成功解析的

這裏總結一下 sturct 導出字段的書寫

  • 1 要解析到struct 內的字段上,該字段必須 首字母大寫(即爲導出的)(強制)
  • 2 struct 字段標誌符 可以與json 數據中的對應字段 匹配即可(可以忽略大小寫)(默認)
  • 3 struct 字段標誌符 可以通過添加tag 與json數據中的對應字段映射(也就是說可以連單詞都不用對應)(可選)
  • 4 GoLand 的中出了Channel, complex, 和函數類型不能 做映射之外,其他都可以(默認)
  • 5 指針類型也可以做映射 如果指針不爲null 就會自動轉成 相應的類型(默認)
  • 6 inteface{} 對應jsonobject ,[]inteface{} 對應 jsonarray

Json 解析

通過調用 jsonUnmarshal() 方法 ,該方法有兩個參數,第一個是要解析的json數據字節切片,第二個是要解析到的變量,該方法 失敗 會返回err


Json 生成

通過調用 json.Marshal方法 ,該方法傳入一個參數 ,即inteface{} (你要轉換的對象) ,該方法會返回一個字節切片,和err


結果如下
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章