php小編百草為你帶來了一篇關于解析golang中的JSON數組的文章。在golang中,我們可以使用自定義類型來解析復雜的JSON數組。這種方法不僅能夠更好地理解和處理JSON數據,還能提供更靈活的操作方式。本文將詳細介紹如何使用自定義類型解析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
}
登錄后復制






