当前位置: > > > > 使用自定义类型解析 golang 中的 JSON 数组
来源:stackoverflow
2024-04-26 10:24:35
0浏览
收藏
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天给大家整理了《使用自定义类型解析 golang 中的 JSON 数组》,聊聊,我们一起来看看吧!
问题内容
我正在尝试在 golang 中解析一个 json 数组,格式如下:
2牛肉840f8f9d8bb724c7736cb14989
例如,json 应该包含不同表的模式。 我已尝试以下代码,但架构返回空:
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() }
我做错了什么?如果您能指出我的错误,我将不胜感激 谢谢!
正确答案
要匹配源/目标 JSON,您可以使用以下类型:
type Schema map[string][]ColumnType
或者,您也可以使用更易于使用的东西:
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 }
以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持!更多关于Golang的相关知识,也可关注公众号。