json解析早就接觸過了,只不過是一直用在php裡面,今天有機會在golang中解析json,確實顛覆了php的json_decode(json)函式.
好吧,今天我解析的汽車之家的介面,整個json資料用工具解析下來是這個樣子:
好吧,這裡面有物件有陣列交替,先去分析一下這個json的組成,懂行的小夥伴一定要注意這裡面""和"{}"的區別:
我就是因為這小問題,解析了半天不出貨,怪不得別人呀;
其實這時候解析這個json有兩種做法:
1.定義type *** struct{}結構體,一層層往下做,這裡比較適合結簡單,並且欄位不多的json;
2.直接定義map[string]inte***ce{},直接賦值,簡單粗暴,但是後期的資料套取會寫很多的map[string]inte***ce{})["***"];
好的,大概的思想有了,那麼直接開幹!!!
1.定義結構體
處理錯誤函式
func
checkerrs(err
error)
}type
jsons
struct
type
result
struct
type
brand
struct
func
brands()
data
, err
:= ioutil.readall(resp
.body
) //json
轉化成map
b :=
jsons{}
json.unmarshal(byte(data
), &b)
fmt.println(b)}
func
main()
這裡需要說明的是,在結構體result中,由於原json資料是乙個a-z的集合,所以如果要全部解析的話,理論上是要從a寫到z的,對於我們這個懶死不想懟**的菜鳥來說,就有了inte***ce{}方法2.定義map
處理錯誤函式
func
checkerrs(err
error)
}func
brands()
data
, err
:= ioutil.readall(resp
.body
) //json
轉化成map
m :=
make(map[string]inte***ce{})
json.unmarshal(byte(data
), &m)
fmt.println(m
["result"].(map[string]inte***ce{})["a"].(inte***ce{})[3].(map[string]inte***ce{})["name"])
}func
main()
雖然不需要使用結構體乙個個的去定義,但是**最後要呼叫json中result集合a下的第4(slice是從零開始的)條資料的name時,你也看到了這呼叫得有多麼的瑪法.最後,不給個點讚麼???
複雜json的解析
最近看了乙個大佬的複雜json解析感覺超有收穫 大佬的部落格 我的目的是把text所對應的值解析出來 我試了各種辦法 根據這個json格式來寫幾個類對應json同意層級的值 編譯以後可以正確獲取text所對應的資訊 第二種 直接使用大佬的思路 我是真的蠢,大佬牛皮 json實際上也是鍵值對 key ...
golang解析json格式 全
專案中客戶端和服務端的互動資料部分為json,因此在服務端就得解析,複雜的json解析起來其實還是挺費勁的。互動的資料類似如下格式 需要將json格式中的w欄位取出來,並且拼成結果串進行展示 從json陣列中獲取ws ws是陣列,陣列元素為object cw是陣列,陣列元素為object w是str...
golang解析json格式 全
專案中客戶端和服務端的互動資料部分為json,因此在服務端就得解析,複雜的json解析起來其實還是挺費勁的。互動的資料類似如下格式 需要將json格式中的w欄位取出來,並且拼成結果串進行展示 從json陣列中獲取ws ws是陣列,陣列元素為object cw是陣列,陣列元素為object w是str...