首页 > 解决方案 > 如何将 []byte 解组为 json 结构,该结构存储为字符串类型变量中的值?

问题描述

注意:myjsonstruct 是从数据库中存储和读取的。为了清晰起见硬编码

myjsonstruct := `{"fldA":"", "fldB":"", "fldC":""}`

targetJsonString := `{"fldA":"valueA","fldB":"valueB","fldC":"valueC","fldOther":"valueOther"}`

现在,我想解组,以便targetJsonString填充myjsonstruct相应的字段myjsonstruct

请注意:myjsonstruct 是一个“字符串”,不能在代码中编程。我在编码时不知道这种结构。它将在运行时作为字符串读取,可能来自数据库。

谢谢!

标签: gomarshallingunmarshalling

解决方案


尝试这个:

package main

import (
    "encoding/json"
    "fmt"
)

type myjsonstruct struct {
    FldA string `json:"fldA"`
    FldB string `json:"fldB"`
    FldC string `json:"fldC"`
}

func main() {
    targetJsonString := `{"fldA":"valueA","fldA":"valueB","fldA":"valueC","fldOther":"valueOther"}`

    res := &myjsonstruct{}
    if err := json.Unmarshal([]byte(targetJsonString), res); err != nil {
        panic(err)
    }

    myjsonstructBytes, err := json.Marshal(res)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(myjsonstructBytes))
}

它将打印: {"fldA":"valueC","fldB":"","fldC":""}

在操场上:https: //play.golang.org/p/qUkGAmvsmAD

(!)另请注意,其中的字段myjsonstruct必须是公共的(以大写字母开头),否则 unmarshaller 将无法访问这些字段。


推荐阅读