Go1.25 json

最新版的goland好像不用配置额外的环境变量,但是命令行模式需要设置环境变量

package main

import (
	"encoding/json/v2"
	"fmt"
	"log"
)

// User 演示Go 1.25 JSON v2的新特性
type User struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email"`
}

func main() {
	// 1. 演示新的JSON v2包的基本使用
	user := User{
		Name:  "张三",
		Age:   30,
		Email: "zhangsan@example.com",
	}

	// 序列化示例
	data, err := json.Marshal(user)
	if err != nil {
		log.Fatalf("序列化失败: %v", err)
	}
	fmt.Println("序列化结果:", string(data))

	// 2. 演示严格的UTF-8验证(v2默认行为)
	invalidUTF8 := []byte(`{"name": "张\xff三"}`)
	var invalidUser User
	if err := json.Unmarshal(invalidUTF8, &invalidUser); err != nil {
		fmt.Println("检测到无效UTF-8错误:", err)
	}

	// 3. 演示大小写敏感的字段匹配(v2新特性)
	caseSensitiveJSON := []byte(`{"Name": "李四", "age": 25}`)
	var caseUser User
	if err := json.Unmarshal(caseSensitiveJSON, &caseUser); err != nil {
		fmt.Println("字段大小写不匹配错误:", err)
	}
	fmt.Printf("反序列化结果(注意Name字段因大小写不匹配未被正确解析): %+v\n", caseUser)
}

// 注意: 运行此代码需要设置环境变量 GOEXPERIMENT=jsonv2
// powershell用 $env:GOEXPERIMENT="jsonv2"
// 编译命令: GOEXPERIMENT=jsonv2 go run main.go
posted @ 2025-08-27 17:23  朝阳1  阅读(25)  评论(0)    收藏  举报