| package main |
| |
| import ( |
| "encoding/json" |
| "fmt" |
| "log" |
| "strings" |
| ) |
| |
| type Structs struct { |
| Name string `json:"name"` |
| Gender int `json:"gender"` |
| } |
| |
| |
| func (s Structs) MarshalJSON() ([]byte, error) { |
| var genderStr string |
| switch s.Gender { |
| case 0: |
| genderStr = "woman" |
| case 1: |
| genderStr = "man" |
| default: |
| genderStr = "unknown" |
| } |
| |
| type Alias Structs |
| |
| return json.Marshal(&struct { |
| Alias |
| Gender string `json:"gender"` |
| }{ |
| Alias: Alias(s), |
| Gender: genderStr, |
| }) |
| } |
| |
| |
| func (s *Structs) UnmarshalJSON(data []byte) error { |
| type Alias Structs |
| |
| aux := struct { |
| Gender string `json:"gender"` |
| *Alias |
| }{ |
| Alias: (*Alias)(s), |
| } |
| |
| if err := json.Unmarshal(data, &aux); err != nil { |
| return err |
| } |
| |
| switch strings.ToLower(aux.Gender) { |
| case "woman": |
| s.Gender = 0 |
| case "man": |
| s.Gender = 1 |
| default: |
| return fmt.Errorf("invalid gender value: %s", aux.Gender) |
| } |
| |
| return nil |
| } |
| |
| func marshalJSON() { |
| gg := Structs{ |
| Name: "gg", |
| Gender: 1, |
| } |
| |
| mm := Structs{ |
| Name: "mm", |
| Gender: 0, |
| } |
| |
| ggdata, err := json.Marshal(gg) |
| if err != nil { |
| log.Fatalln(err) |
| } |
| fmt.Printf("ggdata: %v\n", string(ggdata)) |
| |
| mmdata, err := json.Marshal(mm) |
| if err != nil { |
| log.Fatalln(err) |
| } |
| |
| fmt.Printf("mmdata: %v\n", string(mmdata)) |
| |
| |
| |
| |
| } |
| |
| func unmarshalJSON() { |
| ggdata := `{"name":"gg","gender":"man"}` |
| var gg Structs |
| if err := json.Unmarshal([]byte(ggdata), &gg); err != nil { |
| log.Fatalln(err) |
| } |
| |
| fmt.Printf("%#v\n", gg) |
| mmdata := `{"name":"mm","gender":"woman"}` |
| var mm = Structs{} |
| if err := json.Unmarshal([]byte(mmdata), &mm); err != nil { |
| log.Fatalln(err) |
| } |
| fmt.Printf("%#v\n", mm) |
| |
| |
| |
| |
| } |
| |
| func main() { |
| marshalJSON() |
| |
| fmt.Println(strings.Repeat("=", 30)) |
| |
| unmarshalJSON() |
| } |
| |
| |
| |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)