關注開源中國好久了,可是一直沒有發表過博客,緣由是以爲本身能力還不夠,由於這裏的人們都讓我仰望啊。一直在CSDN堅守着,可是,最近卻總以爲那裏氣氛不對,遂來到了這裏,來發表本身的見解,還有本身的學習筆記。 json
工做中使用的是go語言,其實本身學習的也不是很深刻,只是勉強能夠用來編幾行代碼,出了問題仍是要跟API求救,曾設想過去讀源碼,可是卻一直沒有決心,幸虧有不少testcase,提供了調用函數的方法。 數組
花了好長時間,老是沒有辦法把我定義的文件decode了,把struct改了無數遍,運行testcase確實是正確的,一到個人程序就不行了。我都要打算放棄的時候,忽然注意到了一件事情,示例中的Key都是大寫的,我有種恍然大悟的感受。畢竟爲了簡潔,go省去了好多關鍵字,像public,private這樣的關鍵字都用大小寫,因此,在go中,大小寫應該會有不一樣尋常的含義。果真,把testcase中的大寫改爲小寫,同時把定義中的大寫改爲小寫,確實,就讀不出來了,真是的,浪費了我一個下午的時間來看json的全部testcase。 函數
除了上面說的,必需要把字段的key首字母大寫外,還有一個問題也值得重視。若是把本身當成是這個方法,會去怎樣解析呢?固然,要按照結構去解析,那由於json格式的數據可能順序不是固定的,也許在某些數據項中某些key的位置也不固定,那怎樣去匹配呢,經過變量名,也就是在指定這個結構的時候,將每一個屬性名定義爲與json中的key名相同。(上述都是我猜的,沒有看過源碼)好比說, 學習
[ {"Name":"alias","Age":11},{"Age":22,"Name":"lucy"}] spa
若是要定義與之相同的結構, code
typre student struct{ 源碼
Name string 博客
Age int string
} test
在這裏,無論是json數據的定義仍是struct中的定義,凡是首字母小寫就沒有辦法按照咱們定義的結構區組織數據。
固然,咱們也能夠使用嵌套的,例如:
{「Age」:11,"Name":"Jessica","Course":{"Eng":85,"Math":90}}
那咱們結構體的定義就能夠調整爲:
type score struct{
Eng int
Math int
}
type scorelist struct{
Name string
Age int
Course *score
}
對於有多條的狀況,使用數組就能夠了。結構體定義好以後,直接調用json的Unmarshal方法就Ok了。
第一個參數是[]byte,須要將json數據轉換成byte數組,第二個參數是咱們定義的結構。