如何使用接口变量将 JSON 解组为特定结构
问题:
何时将 JSON 解组为接口变量,encoding/json 包将其解释为映射。我们如何指示它使用特定的结构?
解释:
JSON 包在解组时需要一个具体类型作为目标。传递interface{}变量并不能提供足够的信息,包默认为对象使用map[string]interface{},为数组默认使用[]interface{}。
解决方案:
没有内置方法告诉 json.Unmarshal 使用接口变量将其解组为具体的结构类型。但是,有一个解决方法:
func getFoo() interface{} { return &Foo{"bar"} }
err := json.Unmarshal(jsonBytes, fooInterface)
fmt.Printf("%T %+v", fooInterface, fooInterface)
示例:
以下代码演示了该技术:
package main import ( "encoding/json" "fmt" ) type Foo struct { Bar string `json:"bar"` } func getFoo() interface{} { return &Foo{"bar"} } func main() { fooInterface := getFoo() myJSON := `{"bar":"This is the new value of bar"}` jsonBytes := []byte(myJSON) err := json.Unmarshal(jsonBytes, fooInterface) if err != nil { fmt.Println(err) } fmt.Printf("%T %+v", fooInterface, fooInterface) // prints: *main.Foo &{Bar:This is the new value of bar} }
以上是如何使用 Go 中的接口变量将 JSON 解组为特定结构?的详细内容。更多信息请关注PHP中文网其他相关文章!