package main
import (
"encoding/json"
"fmt"
"log"
)
// 定义一个结构体,字段名要与JSON中的键匹配
type MyData struct {
Name *string `json:"name"` // 目标字段,类型为string
Age *int `json:"age"` // 目标字段,类型为int
Email *string `json:"email"` // 目标字段,类型为string
IsAdmin *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: true
jsonData := `{"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)
}
【golang】json.Unmarshal接收JSON数据并验证特定的字段
于 2024-10-28 10:03:34 首次发布