golang解析複雜的json物件

2021-08-20 23:54:18 字數 2444 閱讀 9207

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...