检查是。
func keyExists(decoded map[string]interface{}, key string) {
val, ok := decoded[key]
return ok && val != nil
}
func main() {
jsonText := `{
"name": "Jimmy",
"age": 23
}`
var decoded map[string]interface{}
if err := json.Unmarshal([]byte(jsonText), &decoded); err != nil {
fmt.Println(err)
os.Exit(0)
}
if keyExists(decoded, "name") {
fmt.Println(decoded["name"].(string))
}
if keyExists(decoded, "age") {
fmt.Println(decoded["age"].(float64))
}
if keyExists(decoded, "gender") {
fmt.Println(decoded["gender"].(int))
}
}
另外,如果你知道你的json是什么样子的话,这还不是最优的。如文档中所述,您可以将其直接解组为一个结构:
type Human struct {
Name string
Age int
Gender int
}
func main() {
jsonText := `{
"name": "Jimmy",
"age": 23
}`
decoded := Human{}
if err := json.Unmarshal([]byte(jsonText), &decoded); err != nil {
fmt.Println(err)
os.Exit(0)
}
fmt.Println(decoded.Name)
fmt.Println(decoded.Age)
fmt.Println(decoded.Gender)
}
我有一个关于定义一个结构并提取json的问题。如果我想让一些json看起来像:{“name”:“Jimmy”,“traits”:{“age”:23,“gender”:0}} ...如何定义值“age”和结构中的“性别”?这里有一个你可以从中解答我的问题的地方:https://play.golang.org/p/TyXbrFAtGo – Acidic
制作一个包含'age'和'gender'的嵌套结构'Traits'。另外,请阅读[encoding/json](https://godoc.org/encoding/json#Marshal)软件包的文档 –
感谢您的快速回复。对于任何有兴趣的人,以下是我如何解决我的问题:https://play.golang.org/p/mq5XL47msM – Acidic