首頁 >後端開發 >Golang >使用自訂類型解析 golang 中的 JSON 數組

使用自訂類型解析 golang 中的 JSON 數組

WBOY
WBOY轉載
2024-02-09 10:39:09716瀏覽

使用自定义类型解析 golang 中的 JSON 数组

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
}

以上是使用自訂類型解析 golang 中的 JSON 數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除