在 Go 中解组通用 json

我是一名新的 Go 程序员(来自 Java),我想重现一种在 Java 中易于使用的通用方式。


我想创建一些函数,允许我对 JSON 字符串执行解组,以避免代码重复。


这是我当前不起作用的代码:


type myStruct1 struct {

    id string

    name string

}


func (obj myStruct1) toString() string {

    var result bytes.Buffer

    result.WriteString("id : ")

    result.WriteString(obj.id)

    result.WriteString("\n")

    result.WriteString("name : ")

    result.WriteString(obj.name)


    return result.String()

}


func main() {


    content := `{id:"id1",name="myName"}`

    object := myStruct1{}

    parseJSON(content, object)


    fmt.Println(object.toString()) 

}


func parseJSON(content string, object interface{}) {

    var parsed interface{}

    json.Unmarshal([]byte(content), &parsed)

}

这段代码在运行时返回给我:


id : 

name : 

你有什么主意吗 ?


谢谢


慕后森
浏览 289回答 3
3回答

牧羊人nacy

问题是您想写入泛型类型吗?您可能想要一个字符串映射。无论如何,这适用于 BSON:var anyJson map[string]interface{} json.Unmarshal(bytes, &anyJson)您将能够像这样访问这些字段:anyJson["id"].(string)不要忘记输入 assert 你的值,它们必须是正确的类型,否则它们会恐慌。(您可以在 golang 站点上阅读有关类型断言的更多信息)

jeck猫

您必须导出您的字段:type myStruct1 struct {        Id string        Name string}请参阅文档中的导出标识符。

噜噜哒

您需要在代码中进行一些更改才能使其正常工作:该函数json.Unmarshal只能在您的结构中设置导出的变量,即以大写字母开头的变量。使用类似ID和的东西Name作为你的变量名myStruct1。您的内容是无效的 JSON。你真正想要的是{"ID":"id1","Name":"myName"}.您正在传递object到parseJSON但您正在使用,parsed而不是object. 请parseJSON接受*myStruct(而不是一个interface{}),并使用该变量,而不是parsed解组字符串时。此外,始终处理错误返回,例如err := json.Unmarshal(content, object)和 check err。我建议你参加Golang Tour ;)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go