Go语言中的JSON处理:面向初学者的解析与序列化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Go语言中JSON处理入门



JSON(JavaScript对象表示法)是一种轻量级的数据交换格式,广泛应用于Web开发、API和配置文件中。Go语言(Golang)提供了内置的encoding/json包,可以轻松实现数据的解析(解码)和序列化(编码)。本文将通过实际示例,为初学者讲解Go语言中JSON处理的基础知识。



encoding/json包基础



encoding/json包是Go的标准库,无需额外安装。该包的两个主要工具是json.Marshal(序列化)和json.Unmarshal(反序列化)函数。



结构体与JSON标签



在Go中,数据通常以结构体(struct)的形式表示。为了控制JSON中字段的名称,需要使用标签。来看一个简单的例子:



package main

import ( "encoding/json" "fmt")

// 使用JSON标签定义结构体type Person struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email,omitempty"` IsAdmin bool `json:"is_admin"`}

func main() { // 创建结构体实例 person := Person{ Name: "伊万·彼得罗夫", Age: 30, Email: "ivan@example.com", IsAdmin: true, } // 序列化为JSON jsonData, _ := json.Marshal(person) fmt.Println(string(jsonData))}


执行结果:



{"name":"伊万·彼得罗夫","age":30,"email":"ivan@example.com","is_admin":true}


重要提示:

  • 标签json:"name"指定了字段在JSON中的名称
  • omitempty选项会跳过空字段(零值)
  • 结构体字段必须是可导出的(以大写字母开头)


将数据序列化(Marshal)为JSON



序列化是将Go结构体或其他数据类型转换为JSON字符串的过程。json.Marshal函数返回一个字节切片([]byte)和一个错误。



不同类型序列化的示例



package main

import ( "encoding/json" "fmt")

type Product struct { ID int `json:"id"` Name string `json:"name"` Price float64 `json:"price"` Tags []string `json:"tags,omitempty"` InStock bool `json:"in_stock"`}

func main() { // 序列化结构体 product := Product{ ID: 101, Name: "笔记本电脑", Price: 79999.99, Tags: []string{"电子产品", "笔记本电脑"}, InStock: true, } // 带缩进的漂亮输出 jsonData, _ := json.MarshalIndent(product, "", " ") fmt.Println(string(jsonData)) // 序列化结构体切片 products := []Product{ {ID: 1, Name: "鼠标", Price: 1500.00, InStock: true}, {ID: 2, Name: "键盘", Price: 3500.00, InStock: false}, } jsonArray, _ := json.Marshal(products) fmt.Println(string(jsonArray))}


结果:



{  "id": 101,  "name": "笔记本电脑",  "price": 79999.99,  "tags": [    "电子产品",    "笔记本电脑"  ],  "in_stock": true}[{"id":1,"name":"鼠标","price":1500,"in_stock":true},{"id":2,"name":"键盘","price":3500,"in_stock":false}]


在Go中解析(Unmarshal)JSON



解析是相反的过程:将JSON字符串转换为Go结构体。这需要使用json.Unmarshal函数。



解析的基本示例



package main

import ( "encoding/json" "fmt" "log")

type User struct { Username string `json:"username"` Age

博客

书籍推荐