go 中 json 的反序列化

时间:2025-03-08 08:25:34
  • package main
  • import (
  • "encoding/json"
  • "fmt"
  • )
  • // 定义一个结构体
  • type Monster struct {
  • Name string
  • Age int
  • Birthday string
  • Sal float64
  • Skill string
  • }
  • // 将 json 字符串,反序列化成struct
  • func unmarshalStruct() {
  • // str 在项目开发中,是通过网络传输获取到.. 或者是读取文件获取到
  • str := "{\"Name\":\"牛魔王~~~\",\"Age\":500,\"Birthday\":\"2011-11-11\",\"Sal\":8000,\"Skill\":\"牛魔拳\"}"
  • // 定义一个 Monster 实例
  • var monster Monster
  • err := ([]byte(str), &monster)
  • if err != nil {
  • ("unmarshal err=%v\n", err)
  • }
  • ("反序列化后 monster=%v =%v \n", monster, )
  • }
  • // 对 map 进行序列化
  • func testMap() string {
  • // 定义一个map
  • var a map[string]interface{}
  • // 使用 map,需要 make
  • a = make(map[string]interface{})
  • a["name"] = "红孩儿~~~~~~"
  • a["age"] = 30
  • a["address"] = "洪崖洞"
  • data, err := (a)
  • if err != nil {
  • ("序列化错误 err=%v\n", err)
  • }
  • // 输出序列化后的结果
  • ("a map 序列化后=%v\n", string(data))
  • return string(data)
  • }
  • // 将 json 字符串,反序列化成 map
  • func unmarshalMap() {
  • //str := "{\"address\":\"洪崖洞\",\"age\":30,\"name\":\"红孩儿\"}"
  • str := testMap()
  • // 定义一个map
  • var a map[string]interface{}
  • // 反序列化
  • // 注意:反序列化map,不需要make,因为 make 操作被封装到 Unmarshal 函数
  • err := ([]byte(str), &a)
  • if err != nil {
  • ("unmarshal err=%v\n", err)
  • }
  • ("反序列化后 a=%v\n", a)
  • }
  • // 将 json 字符串,反序列化成切片
  • func unmarshalSlice() {
  • str := "[{\"address\":\"北京\",\"age\":\"7\",\"name\":\"jack\"}," +
  • "{\"address\":[\"墨西哥\",\"夏威夷\"],\"age\":\"20\",\"name\":\"tom\"}]"
  • // 定义一个slice
  • var slice []map[string]interface{}
  • // 反序列化,不需要 make,因为 make 操作被封装到 Unmarshal 函数
  • err := ([]byte(str), &slice)
  • if err != nil {
  • ("unmarshal err=%v\n", err)
  • }
  • ("反序列化后 slice=%v\n", slice)
  • }
  • func main() {
  • ("------------------------------------------------------------------------对结构体进行反序列化---------------------")
  • unmarshalStruct()
  • ("------------------------------------------------------------------------对map进行反序列化----------------------")
  • unmarshalMap()
  • ("------------------------------------------------------------------------对切片进行反序列化----------------------")
  • unmarshalSlice()
  • }