MST

星途 面试题库

面试题:Go 语言中结构体与 JSON 序列化和反序列化

在 Go 语言中,给定一个结构体 `type User struct { Name string `json:"name"` Age int `json:"age"` }`,请编写代码将该结构体实例序列化为 JSON 格式的字符串,并将一个符合该结构体格式的 JSON 字符串反序列化为 `User` 结构体实例。同时说明在这个过程中,结构体标签 `json:"name"` 和 `json:"age"` 的作用是什么。
15.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    // 序列化
    user := User{Name: "John", Age: 30}
    data, err := json.Marshal(user)
    if err != nil {
        fmt.Println("序列化错误:", err)
        return
    }
    fmt.Println("序列化后的JSON字符串:", string(data))

    // 反序列化
    jsonStr := `{"name":"Jane","age":25}`
    var newUser User
    err = json.Unmarshal([]byte(jsonStr), &newUser)
    if err != nil {
        fmt.Println("反序列化错误:", err)
        return
    }
    fmt.Println("反序列化后的User结构体:", newUser)
}

结构体标签 json:"name"json:"age" 的作用:

  • 在序列化时,encoding/json 包会使用这些标签来指定结构体字段在生成的 JSON 字符串中的字段名。例如 json:"name" 会使得 Name 字段在 JSON 中以 "name" 作为键。
  • 在反序列化时,encoding/json 包会根据这些标签来匹配 JSON 中的字段名到结构体的相应字段。例如 "name" 会匹配到 Name 字段。如果没有这些标签,默认会使用结构体字段的大写字母开头的名字作为 JSON 中的键,但这种方式可能不符合 JSON 命名习惯(通常 JSON 中字段名使用小写字母开头),使用标签可以更好地控制 JSON 序列化和反序列化的行为。