【golang】json.Unmarshal接收JSON数据并验证特定的字段

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)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值