檢查是。
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