为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中解组通用 json

在 Go 中解组通用 json

Go
慕后森 2021-12-27 10:36:22
我是一名新的 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 : 你有什么主意吗 ?谢谢
查看完整描述

3 回答

?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

问题是您想写入泛型类型吗?您可能想要一个字符串映射。无论如何,这适用于 BSON:

var anyJson map[string]interface{}
json.Unmarshal(bytes, &anyJson)

您将能够像这样访问这些字段:

anyJson["id"].(string)

不要忘记输入 assert 你的值,它们必须是正确的类型,否则它们会恐慌。(您可以在 golang 站点上阅读有关类型断言的更多信息)


查看完整回答
反对 回复 2021-12-27
?
jeck猫

TA贡献1909条经验 获得超7个赞

您必须导出您的字段:


type myStruct1 struct {

        Id string

        Name string

}

请参阅文档中的导出标识符。


查看完整回答
反对 回复 2021-12-27
?
噜噜哒

TA贡献1784条经验 获得超7个赞

您需要在代码中进行一些更改才能使其正常工作:

  1. 该函数json.Unmarshal只能在您的结构中设置导出的变量,即以大写字母开头的变量。使用类似ID和的东西Name作为你的变量名myStruct1

  2. 您的内容是无效的 JSON。你真正想要的是{"ID":"id1","Name":"myName"}.

  3. 您正在传递objectparseJSON但您正在使用,parsed而不是object. 请parseJSON接受*myStruct(而不是一个interface{}),并使用该变量,而不是parsed解组字符串时。此外,始终处理错误返回,例如err := json.Unmarshal(content, object)和 check err

我建议你参加Golang Tour ;)


查看完整回答
反对 回复 2021-12-27
  • 3 回答
  • 0 关注
  • 210 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号