go - 如何将 []byte 解码为 json 结构,该结构作为值存储在字符串类型的变量中?

标签 go marshalling unmarshalling

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

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

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

现在,我想将 targetJsonString 解码到 myjsonstruct 中,以便填充 myjsonstruct 中的相应字段。

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

谢谢!

最佳答案

试试这个:

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":""}

在 Playground 上:https://play.golang.org/p/qUkGAmvsmAD

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

关于go - 如何将 []byte 解码为 json 结构,该结构作为值存储在字符串类型的变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52835458/

相关文章:

c# - 通过 UDP 连接在 C# 中读取此 C++ 编码数据

java - 从 xpath 中查找包含标签作为 Java 子元素的字符串

testing - 如何去测试多个包

mongodb - Mongo 授权数据库失败

json - 将字节数组解码到接口(interface)并将该接口(interface)类型转换为结构不起作用?

c# - 如何调用分配输出缓冲区以在 C# 中返回数据的非托管 C++ 函数?

go - 如何不初始化结构的一部分

java - 如何在 Spring RestTemplate 中自定义自动编码(marshal)处理以生成/修改 XML header (编码、DOCTYPE)

json - 在 Go 中解码不一致的 JSON

java - 按属性名称与标记名称解码 XML 元素