当前位置: 首页 > news >正文

Go基础:json文件处理详解(标准库`encoding/json`)

文章目录

    • 一、JSON序列化与反序列化
      • 1.1 序列化(将Go结构体转换为JSON)
      • 1.2 反序列化(将JSON转换为Go结构体)
    • 二、JSON文件读写
      • 2.1 写入JSON文件
      • 2.2 读取JSON文件
    • 三、JSON处理中的常见技巧
      • 3.1 处理嵌套JSON
      • 3.2 忽略空字段

一、JSON序列化与反序列化

Go语言提供了强大的内置支持来处理JSON数据,主要通过标准库encoding/json实现。

1.1 序列化(将Go结构体转换为JSON)

使用json.Marshal函数可以将Go结构体转换为JSON格式的字节切片。
示例代码:

package main
import ("encoding/json""fmt"
)
type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}
func main() {person := Person{Name: "Alice", Age: 30}jsonData, err := json.Marshal(person)if err != nil {fmt.Println("Error marshaling JSON:", err)return}fmt.Println(string(jsonData))
}

输出:

{"name":"Alice","age":30}

1.2 反序列化(将JSON转换为Go结构体)

使用json.Unmarshal函数可以将JSON数据解析为Go结构体。
示例代码:

package main
import ("encoding/json""fmt"
)
type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}
func main() {jsonData := `{"name":"Bob","age":25}`var person Personerr := json.Unmarshal([]byte(jsonData), &person)if err != nil {fmt.Println("Error unmarshaling JSON:", err)return}fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
}

输出:

Name: Bob, Age: 25

二、JSON文件读写

2.1 写入JSON文件

使用os.Createjson.Marshal结合,可以将Go结构体数据写入JSON文件。
示例代码:

package main
import ("encoding/json""os"
)
type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}
func main() {person := Person{Name: "Charlie", Age: 28}file, err := os.Create("person.json")if err != nil {panic(err)}defer file.Close()encoder := json.NewEncoder(file)err = encoder.Encode(person)if err != nil {panic(err)}
}

运行后,person.json文件内容为:

{"name":"Charlie","age":28}

2.2 读取JSON文件

使用os.Openjson.Decoder结合,可以从JSON文件中读取数据并解析为Go结构体。
示例代码:

package main
import ("encoding/json""fmt""os"
)
type Person struct {Name string `json:"name"`Age  int    `json:"age"`
}
func main() {file, err := os.Open("person.json")if err != nil {panic(err)}defer file.Close()var person Persondecoder := json.NewDecoder(file)err = decoder.Decode(&person)if err != nil {panic(err)}fmt.Printf("Name: %s, Age: %d\n", person.Name, person.Age)
}

输出:

Name: Charlie, Age: 28

三、JSON处理中的常见技巧

3.1 处理嵌套JSON

Go语言支持嵌套结构体,可以轻松处理复杂的JSON数据。
示例代码:

package main
import ("encoding/json""fmt"
)
type Address struct {City  string `json:"city"`State string `json:"state"`
}
type Person struct {Name    string  `json:"name"`Age     int     `json:"age"`Address Address `json:"address"`
}
func main() {jsonData := `{"name":"David","age":40,"address":{"city":"New York","state":"NY"}}`var person Personerr := json.Unmarshal([]byte(jsonData), &person)if err != nil {fmt.Println("Error unmarshaling JSON:", err)return}fmt.Printf("Name: %s, City: %s\n", person.Name, person.Address.City)
}

输出:

Name: David, City: New York

3.2 忽略空字段

通过omitempty标签,可以在序列化时忽略空字段。
示例代码:

package main
import ("encoding/json""fmt"
)
type Person struct {Name string `json:"name"`Age  int    `json:"age,omitempty"`
}
func main() {person := Person{Name: "Eve"}jsonData, err := json.Marshal(person)if err != nil {fmt.Println("Error marshaling JSON:", err)return}fmt.Println(string(jsonData))
}

输出:

{"name":"Eve"}

Go语言通过encoding/json包提供了强大的JSON处理能力,包括序列化、反序列化、文件读写及复杂数据结构的处理。

http://www.dtcms.com/a/445768.html

相关文章:

  • 网站页头尺寸网站建设实物实训目的
  • RegNet:高效可扩展网络
  • 软考 系统架构设计师系列知识点之杂项集萃(169)
  • 大数据毕业设计选题推荐-基于大数据的人口普查收入数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • 实验室网站制作数据交易网站源码
  • 【Kubernetes】(二十)Gateway
  • 爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南——企业级实时数据闭环构建
  • 桂林哪里可以做网站wordpress前台不显示
  • 模拟退火粒子群优化算法(SA-PSO):原理、应用与展望
  • 不用每次都改 `easysearch.yml` 也能改启动参数 —— 用 Docker 环境变量搞定一切
  • 三问岚图,计划登陆港股对消费者意味着什么?
  • 舒尔特方格开源
  • D365财务和运营应用
  • 沧州seo公司哈尔滨seo和网络推广
  • 5.机器学习的介绍
  • 安徽合肥网站制作公司源代码
  • Flink 连接器与格式thin/uber 制品、打包策略与上线清单
  • 玩转ClaudeCode:通过Chrome DevTools MCP实现页面抓取和调试的基础入门
  • Playwright MCP vs Chrome DevTools MCP vs Chrome MCP 深度对比
  • 网页 网站 区别哪些网站可以免费申请
  • 玩转ClaudeCode:通过Chrome DevTools MCP实现智能页面抓取与调试
  • rabbitMQ续谈
  • RabbitMQ概念 与 工作原理
  • 力扣每日一题(一)双指针 + 状态转移dp 矩阵快速幂
  • [ Redis ] 数据结构储存系统
  • 广东网站开发推荐山东住房城乡建设厅网站首页
  • [人工智能-综述-21]:学习人工智能的路径
  • 黄冈手机网站建设网站支付宝网上支付功能怎么做
  • Oracle OCP认证考试题目详解082系列第49题
  • HarmonyOS ArkTS深度解析:从语法特性到UI开发实践