设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间22 现在时间22 缓存数据 关关难过关关过,夜夜难熬夜夜熬。万般皆苦,悲欢自渡,他人难悟。晚安!

关关难过关关过,夜夜难熬夜夜熬。万般皆苦,悲欢自渡,他人难悟。晚安!

查看: 1571|回复: 2

Go语言JSON编解码神器之marshal的运用

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:220
  • 打卡月天数:0
  • 打卡总奖励:3421
  • 最近打卡:2025-08-22 03:51:59
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
394
主题
385
精华
0
金钱
4624
积分
829
注册时间
2023-1-24
最后登录
2025-8-22

发表于 2024-5-2 04:19:18 | 显示全部楼层 |阅读模式
目录


  • 一: 简单的进行编解码
  • 二:成员变量不可导出
  • 三:解析成固定字段
  • 四:嵌套导出
  • 五:指针变量

一: 简单的进行编解码
  1. package main
  2. import (
  3.         "encoding/json"
  4.         "fmt"
  5. )
  6. type Person struct {
  7.         Name string
  8.         Age  int
  9.         Job  string
  10. }
  11. func main() {
  12.         // 数据--->Json
  13.         p := &Person{
  14.                 Name: "shanwen",
  15.                 Age:  23,
  16.                 Job:  "engineer",
  17.         }
  18.         // Marshal返回的结果是字节数组
  19.         pByte, err := json.Marshal(p)
  20.         if err != nil {
  21.                 fmt.Println("json marshal error!!!")
  22.         }
  23.         // 字节数组需要转成字符串
  24.         fmt.Println(string(pByte))
  25.         // {"Name":"shanwen","Age":23,"Job":"engineer"}
  26.         pOut := Person{}
  27.         err = json.Unmarshal(pByte, &pOut)
  28.         if err != nil {
  29.                 fmt.Println(err)
  30.         }
  31.         fmt.Printf("pOunt Name is %s Age is %d Job is %s\n", pOut.Name, pOut.Age, pOut.Job)
  32.         // pOunt Name is shanwen Age is 23 Job is engineer
  33. }
复制代码
二:成员变量不可导出
  1. package main
  2. import (
  3.         "encoding/json"
  4.         "fmt"
  5. )
  6. type Person2 struct {
  7.         name string // 测试成员变量导出
  8.         Age  int
  9.         Job  string
  10. }
  11. func main() {
  12.         // 数据--->Json
  13.         p := &Person2{
  14.                 name: "shanwen",
  15.                 Age:  23,
  16.                 Job:  "engineer",
  17.         }
  18.         // Marshal返回的结果是字节数组
  19.         pByte, err := json.Marshal(p)
  20.         if err != nil {
  21.                 fmt.Println("json marshal error!!!")
  22.         }
  23.         // 字节数组需要转成字符串
  24.         fmt.Println(string(pByte))
  25.         // {"Age":23,"Job":"engineer"}  // 不会导出name字段
  26. }
复制代码
三:解析成固定字段
  1. package main
  2. import (
  3.         "encoding/json"
  4.         "fmt"
  5. )
  6. type Person3 struct {
  7.         Name string `json:"user_name"` // 测试导出固定字段
  8.         Age  int
  9.         Job  string
  10. }
  11. func main() {
  12.         // 数据--->Json
  13.         p := &Person3{
  14.                 Name: "shanwen",
  15.                 Age:  23,
  16.                 Job:  "engineer",
  17.         }
  18.         // Marshal返回的结果是字节数组
  19.         pByte, err := json.Marshal(p)
  20.         if err != nil {
  21.                 fmt.Println("json marshal error!!!")
  22.         }
  23.         // 字节数组需要转成字符串
  24.         fmt.Println(string(pByte))
  25.         // {"user_name":"shanwen","Age":23,"Job":"engineer"}  // name解析成user_name了
  26. }
复制代码
四:嵌套导出
  1. package main
  2. import (
  3.         "encoding/json"
  4.         "fmt"
  5. )
  6. type Person4 struct {
  7.         Name string `json:"user_name"`
  8.         Age  int
  9.         Job  string
  10. }
  11. type Man struct {
  12.         Person Person4
  13.         IsMan  bool
  14. }
  15. func main() {
  16.         // 数据--->Json
  17.         m := Man{
  18.                 IsMan: true,
  19.         }
  20.         m.Person.Name = "shanwen"
  21.         m.Person.Job = "engineer"
  22.         m.Person.Age = 23
  23.         // Marshal返回的结果是字节数组
  24.         pByte, err := json.Marshal(m)
  25.         if err != nil {
  26.                 fmt.Println("json marshal error!!!")
  27.         }
  28.         // 字节数组需要转成字符串
  29.         fmt.Println(string(pByte))
  30.         // {"Person":{"user_name":"shanwen","Age":23,"Job":"engineer"},"IsMan":true}  // 复合结构转换
  31. }
复制代码
五:指针变量

指针变量,编码时自动转换为它所指向的值。
  1. package main
  2. import (
  3.         "encoding/json"
  4.         "fmt"
  5. )
  6. type Person4 struct {
  7.         Name string `json:"user_name"`
  8.         Age  int
  9.         Job  string
  10. }
  11. type Man struct {
  12.         Person *Person4
  13.         IsMan  bool
  14. }
  15. func main() {
  16.         // 数据--->Json
  17.         p := new(Person4)
  18.         p.Name = "shanwen"
  19.         p.Job = "engineer"
  20.         p.Age = 23
  21.         m := Man{
  22.                 IsMan: true,
  23.         }
  24.         // 指针变量
  25.         m.Person = p
  26.         // Marshal返回的结果是字节数组
  27.         pByte, err := json.Marshal(m)
  28.         if err != nil {
  29.                 fmt.Println("json marshal error!!!")
  30.         }
  31.         // 字节数组需要转成字符串
  32.         fmt.Println(string(pByte))
  33.         // {"Person":{"user_name":"shanwen","Age":23,"Job":"engineer"},"IsMan":true}  // 复合结构转换
  34. }
复制代码
以上就是Go语言JSON编解码神器之marshal的运用的详细内容,更多关于go marshal的资料请关注晓枫资讯其它相关文章!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
15
积分
10
注册时间
2022-12-28
最后登录
2022-12-28

发表于 2024-9-23 13:08:16 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
11
积分
2
注册时间
2023-9-6
最后登录
2023-9-6

发表于 5 天前 | 显示全部楼层
感谢楼主分享。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表