package mainimport ("encoding/json""fmt""log"
)// 定义一个结构体,字段名要与JSON中的键匹配
type MyData struct {Name *string `json:"name"` // 目标字段,类型为stringAge *int `json:"age"` // 目标字段,类型为intEmail *string `json:"email"` // 目标字段,类型为stringIsAdmin *bool `json:"isAdmin"` // 目标字段,类型为bool
}func main() {// 假设这是从某个来源接收到的JSON字符串// jsonData := `{"name":"John Doe","age":30,"email":"john@example.com","isAdmin":true}`//结果// Name: John Doe// Age: 30// Email: john@example.com// Is Admin: truejsonData := `{"age":30,"email":"john@example.com","isAdmin":true}`//结果//2024/10/28 10:00:55 JSON data does not contain the required fields or fields are of incorrect type// 创建一个MyData类型的变量来接收解析后的数据var data MyData// 解析JSON数据到结构体err := json.Unmarshal([]byte(jsonData), &data)if err != nil {log.Fatalf("Error parsing JSON: %s", err)}// 检查是否包含目标字段,并且类型符合预期if data.Name == nil || data.Age == nil || data.Email == nil || data.IsAdmin == nil {log.Fatal("JSON data does not contain the required fields or fields are of incorrect type")}// 如果没有错误,打印接收到的数据fmt.Printf("Name: %s\n", *data.Name)fmt.Printf("Age: %d\n", *data.Age)fmt.Printf("Email: %s\n", *data.Email)fmt.Printf("Is Admin: %t\n", *data.IsAdmin)
}