php小編百草為你帶來(lái)了一篇關(guān)于解析golang中的JSON數(shù)組的文章。在golang中,我們可以使用自定義類(lèi)型來(lái)解析復(fù)雜的JSON數(shù)組。這種方法不僅能夠更好地理解和處理JSON數(shù)據(jù),還能提供更靈活的操作方式。本文將詳細(xì)介紹如何使用自定義類(lèi)型解析JSON數(shù)組,并給出一些實(shí)用的示例代碼,幫助你更好地理解和運(yùn)用這一技巧。無(wú)論你是初學(xué)者還是有一定經(jīng)驗(yàn)的開(kāi)發(fā)者,都能從本文中受益匪淺,快來(lái)一起探索吧!
問(wèn)題內(nèi)容
我正在嘗試在 golang 中解析一個(gè) json 數(shù)組,格式如下:
2牛肉840f8f9d8bb724c7736cb14989
例如,json 應(yīng)該包含不同表的模式。
我已嘗試以下代碼,但架構(gòu)返回空:
package main import ( "encoding/json" "io" "log" "os" ) type ColumnType struct { Name string `json:"name"` Type string `json:"type"` } type Schema struct { Schema map[string][]ColumnType } func main() { mocksSchemas, _ := os.Open("parse_config/mock_schema.json") var schemas []Schema content, err := io.ReadAll(mocksSchemas) if err != nil { log.Fatal("Error when reading mock file: ", err) } err = json.Unmarshal(content, &schemas) if err != nil { log.Fatal("Error during Unmarshal(): ", err) } defer mocksSchemas.Close() }
登錄后復(fù)制
我做錯(cuò)了什么?如果您能指出我的錯(cuò)誤,我將不勝感激
謝謝!
解決方法
要匹配源/目標(biāo) JSON,您可以使用以下類(lèi)型:
type Schema map[string][]ColumnType
登錄后復(fù)制
或者,您也可以使用更易于使用的東西:
type Schema struct { Table string Columns []ColumnType } func (s Schema) MarshalJSON() ([]byte, error) { return json.Marshal(map[string][]ColumnType{ s.Table: s.Columns, }) } func (s *Schema) UnmarshalJSON(data []byte) error { var m map[string][]ColumnType if err := json.Unmarshal(data, &m); err != nil { return err } for k, v := range m { s.Table = k s.Columns = v break } return nil }
登錄后復(fù)制