全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Golang如何处理json序列化_Go json编码解码语法说明

Go语言通过encoding/json包实现JSON编解码,使用json.Marshal将结构体转为JSON,需字段导出并可用json标签自定义键名;json.Unmarshal则解析JSON到变量,需传指针;支持map[string]interface{}处理动态结构,配合omitempty可忽略空值,注意类型断言与时间格式处理。

Go语言通过标准库encoding/json提供对JSON的编码和解码支持,使用简单且高效。处理结构体与JSON之间的转换时,主要依赖json.Marshaljson.Unmarshal两个函数。

基本编码:结构体转JSON

使用json.Marshal可将Go结构体或map转换为JSON格式的字节切片。

package main

import (
    "encoding/json"
    "fmt"
)

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

func main() {
    p := Person{Name: "Alice", Age: 30}
    data, err := json.Marshal(p)
    if err != nil {
        fmt.Println("编码失败:", err)
        return
    }
    fmt.Println(string(data)) // 输出: {"name":"Alice","age":30}
}

结构体字段需以大写字母开头(导出),否则无法被序列化。通过json:标签可自定义JSON中的字段名。

基本解码:JSON转结构体

使用json.Unmarshal将JSON数据解析到Go变量中。

func main() {
    jsonData := `{"name":"Bob","age":25}`
    var p Person
    err := json.Unmarshal([]byte(jsonData), &p)
    if err != nil {
        fmt.Println("解码失败:", err)
        return
    }
    fmt.Printf("%+v\n", p) // 输出: {Name:Bob Age:25}
}

目标变量需传入指针,确保数据能写入。若JSON字段在结构体中不存在,会被忽略;若缺少字段,则对应字段保持零值。

处理动态或未知结构

当结构不固定时,可用map[string]interface{}interface{}接收数据。

func main() {
    jsonData := `{"id":1,"info":{"name":"Tom","active":true}}`
    var data map[string]interface{}
    json.Unmarshal([]byte(jsonData), &data)

    fmt.Println(data["id"])           // 1
    fmt.Println(data["info"].(map[string]interface{})["name"]) // Tom
}

注意类型断言的使用,避免运行时panic。也可结合json.RawMessage延迟解析部分字段。

常见技巧与注意事项

  • 字段标签json:"name,omitempty"表示该字段为空值时不会输出到JSON中,常用于指针、切片、零值字段
  • 嵌套结构自动处理,支持数组、切片、指针等类型
  • 时间类型需配合time.Time和特定格式标签,如json:"created_at,string"
  • 私有字段(小写开头)不会被序列化
  • 支持HTML转义控制:json.NewEncoder(os.Stdout).SetEscapeHTML(false)

基本上就这些。掌握MarshalUnmarshal的使用,加上合理的结构体标签,就能高效处理大多数JSON场景。不复杂但容易忽略细节,比如字段导出和类型匹配问题。


# html  # js  # json  # go  # golang  # go语言  # 编码  # 字节  # ai  # 标准库  # String  # 结构体  # 指针  # Interface 


相关文章: 网站制作公司排行榜,抖音怎样做个人官方网站  东莞专业制作网站的公司,东莞大学生网的网址是什么?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  官网网站制作腾讯审核要多久,联想路由器newifi官网  如何在建站主机中优化服务器配置?  C#怎么创建控制台应用 C# Console App项目创建方法  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  如何破解联通资金短缺导致的基站建设难题?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  建站之星后台管理如何实现高效配置?  行程制作网站有哪些,第三方机票电子行程单怎么开?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何选择服务器才能高效搭建专属网站?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  香港服务器如何优化才能显著提升网站加载速度?  C#如何在一个XML文件中查找并替换文本内容  如何通过万网虚拟主机快速搭建网站?  Android自定义listview布局实现上拉加载下拉刷新功能  沈阳制作网站公司排名,沈阳装饰协会官方网站?  如何快速上传建站程序避免常见错误?  如何获取上海专业网站定制建站电话?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  建站之星如何取消后台验证码生成?  如何通过可视化优化提升建站效果?  高端建站三要素:定制模板、企业官网与响应式设计优化  建站之星代理如何获取技术支持?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  ui设计制作网站有哪些,手机UI设计网址吗?  上海网站制作开发公司,上海买房比较好的网站有哪些?  c# 服务器GC和工作站GC的区别和设置  建站之星会员如何解锁更多建站功能?  太原网站制作公司有哪些,网约车营运证查询官网?  如何用PHP快速搭建CMS系统?  济南企业网站制作公司,济南社保单位网上缴费步骤?  建站之星多图banner生成与模板自定义指南  阿里云网站制作公司,阿里云快速搭建网站好用吗?  在线制作视频的网站有哪些,电脑如何制作视频短片?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  建站之星如何优化SEO以实现高效排名?  香港服务器网站卡顿?如何解决网络延迟与负载问题? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。