我是一名新的 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 站点上阅读有关类型断言的更多信息)

噜噜哒
TA贡献1784条经验 获得超7个赞
您需要在代码中进行一些更改才能使其正常工作:
该函数
json.Unmarshal
只能在您的结构中设置导出的变量,即以大写字母开头的变量。使用类似ID
和的东西Name
作为你的变量名myStruct1
。您的内容是无效的 JSON。你真正想要的是
{"ID":"id1","Name":"myName"}
.您正在传递
object
到parseJSON
但您正在使用,parsed
而不是object
. 请parseJSON
接受*myStruct
(而不是一个interface{}
),并使用该变量,而不是parsed
解组字符串时。此外,始终处理错误返回,例如err := json.Unmarshal(content, object)
和 checkerr
。
我建议你参加Golang Tour ;)
- 3 回答
- 0 关注
- 210 浏览
添加回答
举报
0/150
提交
取消