3 回答
TA贡献1862条经验 获得超7个赞
您可以将其解组为interface{}. 如果这样做,json.Unmarshal会将 JSON 对象解组为 Go 映射。
例如:
var untypedResult interface{}
err := json.Unmarshal(..., &untypedResult)
result := untypedResult.(map[string]interface{})
// ... now you can iterate over the keys and values of result ...
请参阅 < http://blog.golang.org/json-and-go#TOC_5。> 一个完整的例子。
TA贡献1998条经验 获得超6个赞
如果您碰巧有可能未指定的字段,您可以将输入解组到带有指针的结构中。如果该字段不存在,则指针将为nil。
package main
import (
"encoding/json"
"fmt"
)
type Foo struct {
A *string
B *string
C *int
}
func main() {
var input string = `{"A": "a","C": 3}`
var foo Foo
json.Unmarshal([]byte(input), &foo)
fmt.Printf("%#v\n", foo)
}
如果你真的想要更灵活的东西,你也可以将你的输入解组到map[string]interface{}.
package main
import (
"encoding/json"
"fmt"
)
func main() {
var input string = `{"A": "a","C": 3}`
var foo map[string]interface{} = make(map[string]interface{})
json.Unmarshal([]byte(input), &foo)
fmt.Printf("%#v\n", foo)
}
TA贡献1821条经验 获得超4个赞
解组 JSON 文档时,并非结构中定义的所有属性都需要出现在 JSON 文档中。在您的示例中,您可以定义以下结构:
type MyJson struct {
Name string `json:"name"`
Town string `json:"town"`
Email string `json:"email"`
}
当您使用此结构解组缺少一个或多个这些属性的 JSON 文档时,它们将使用相应类型的 null 值(string属性的空字符串)进行初始化。
或者,您可以使用泛型interface{}类型进行解组,然后使用类型断言。这在博客文章“JSON and GO”中有详细记录:
var jsonDocument interface{}
err := json.Unmarshal(jsonString, &jsonDocument)
map := jsonDocument.(map[string]interface{})
town := map["town"].(string);
- 3 回答
- 0 关注
- 213 浏览
添加回答
举报