前一章有稍微提到json,那麼json是什麼呢?
JavaScript物件表示法(JavaScript Object Notation)簡稱json。
JSON以純文字去儲存和傳送結構資料,你可以靠特定的格式去儲存特定格式的資料,比如:數字,字串,陣列
雖然名稱內有JavaScript,但是其他語言也支援解析json,當然也包含go。
在go內,可以透過struct和json.Unmarshal跟json.Marshal去解析json跟將struct轉成json,
前一章有展示過如何unmarshal json,這邊則介紹如何marshal
type userPara struct {
ID string `json:"id"`
}
userParaExample := &userPara{
ID: "123",
}
jsondata, _ := json.Marshal(userParaExample)
透過這種方式,就可以產生json jsondata([]byte)。
前一章提到,如果靠原生的go json套件,只能用unmarshal的方式來把資料取出來,
但是這在資料量大的情況,會很吃記憶體,這時就可以使用jsonparser這個套件來取出你要的值。
這個jsonparser套件有著很強大的效能,
效能是內建的encoding/json的10倍,由於他是只依靠內建的bytes套件去操作字串,
所以有著很強大的效能。
使用上也非常簡單:
data := []byte(`{
"id": "123"
}`)
idString, err := jsonparser.GetString(data, "id")
if err !=nil {
...
}
在知道key的情況下,直接指定你要抓的key值就可以取出你要的資料
對於int則是:
idInt, err := jsonparser.GetInt(data, "id")
如果是array則改用下面這種方式
data := []byte(`{
"id":[
"123",
"234",
"456"
]
}`)
jsonparser.ArrayEach(data, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
fmt.Println(string(value))
}, "id")
透過這些方式,可以用不消耗記憶體的方式取出你要的值。