如何将 json 解组为 Go 结构映射?

我是 Go 新手,我很难处理 json 文件。我有 JSON 数据,我想将其转换为 map[string]*SomeStruct 类型的地图


示例 JSON:


{

        "Component": 

        {

                "fieldName": "component.name", 

                "fieldType": "STR" 

        },

        "Collection": {     

                "fieldName": "collection", 

                "fieldType": "INT"

        },

        "OldgenUse" : {     

                "fieldName" : "oldgen.use",         

                "fieldType": "INT"      

        },

    

}

我想阅读 JSON 并构建这样的地图:


    expcMetadata := map[string]*FieldMap{

            "Component":    {FieldName: "component.name", FieldType: "STR"},

            "Collection":   {FieldName: "collection", FieldType: "INT"},

            "OldGenUse":    {FieldName: "oldgen.use", FieldType: "INT"},

}

我能够解组为 map[string]interface{}。如何解组为 map[string]*FieldMap


我的代码给了我一张空地图:


type FieldMap struct {

    FieldName string `json:"fieldName"`

    FieldType        string `json:"fieldType"`

}


type JSONType struct {

    FieldSet map[string]FieldMap `json:"fields"`

}

func main() {


    jsonFile, er := os.Open("fields.json")

    if er != nil {

        fmt.Println(er)

    }

    fmt.Println("Successfully Opened users.json")

    defer jsonFile.Close()


    byteValue, _ := ioutil.ReadAll(jsonFile)


    // var m map[string]interface{}

    var m JSONType

    err := json.Unmarshal(byteValue, &m)

    if err != nil {

        log.Fatal(err)

    }

    

    fmt.Println(m)


如果有人可以帮助我解决这个问题,我将不胜感激。


米琪卡哇伊
浏览 133回答 2
2回答

www说

您的输入 JSON 是一个对象,因此直接将其编组到地图中。包装器JSONType是不必要的。var m map[string]FieldMaperr := json.Unmarshal(byteValue, &m)if err != nil {    log.Fatal(err)}在Go Playground上查看一个工作示例,输出为:map[Collection:{collection INT} Component:{component.name STR} OldgenUse:{oldgen.use INT}]

拉莫斯之舞

对于JSONTypeJSON 中的结构,需要一个fields节点。相反,您可以在解组时使用 map 。m := make(map[string]FieldMap)err := json.Unmarshal(byteValue, &m)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go