golang 使用gzip对json例子

package main

import (

"bytes"

"compress/gzip"

"encoding/json"

"fmt"

"io"

"log"

)

// User 结构体定义

type User struct {

ID int `json:"id"`

Name string `json:"name"`

Age int `json:"age"`

Fee float64 `json:"fee"`

}

// gzipCompress 将任何类型的接口压缩为 Gzip 格式

func gzipCompress(v interface{}) ([]byte, error) {

// 将结构体转换为JSON字节切片

jsonData, err := json.Marshal(v)

if err != nil {

return nil, err

}

var buf bytes.Buffer

// 创建Gzip Writer

w := gzip.NewWriter(&buf)

if _, err := w.Write(jsonData); err != nil {

return nil, err

}

// 关闭Gzip Writer

if err := w.Close(); err != nil {

return nil, err

}

return buf.Bytes(), nil

}

// gzipDecompress 解压缩 Gzip 数据,填充到目标结构体

func gzipDecompress(compressedData []byte, v interface{}) error {

r, err := gzip.NewReader(bytes.NewReader(compressedData))

if err != nil {

return err

}

defer r.Close()

// 读取解压缩后的数据

decompressedData, err := io.ReadAll(r)

if err != nil {

return err

}

// 将JSON数据解码到目标结构体

return json.Unmarshal(decompressedData, v)

}

// 主函数

func main() {

// 创建示例用户数据

user := User{

ID: 1,

Name: "Alice",

Age: 30,

Fee: 1500.00,

}

// 压缩JSON数据

compressedData, err := gzipCompress(user)

if err != nil {

log.Fatal(err)

}

fmt.Printf("Compressed Data (Gzip bytes): %v\n", compressedData)

// 解压缩回原始的用户数据

var decompressedUser User

if err := gzipDecompress(compressedData, &decompressedUser); err != nil {

log.Fatal(err)

}

// 输出解压缩后的数据

fmt.Printf("Decompressed User: %+v\n", decompressedUser)

}

输出:

Compressed Data (Gzip bytes): [31 139 8 0 0 0 0 0 0 255 170 86 202 76 81 178 50 212 81 202 75 204 77 85 178 82 114 204 201 76 78 85 210 81 74 76 79 85 178 50 54 208 81 74 75 77 85 178 50 52 53 48 168 5 4 0 0 255 255 212 252 187 47 43 0 0 0]

Decompressed User: {ID:1 Name:Alice Age:30 Fee:1500}

相关推荐
滨HI01 天前
C++ opencv拟合直线
开发语言·c++·opencv
沐浴露z1 天前
详解JDK21新特性【虚拟线程】
java·开发语言·jvm
艾莉丝努力练剑1 天前
【C++:红黑树】深入理解红黑树的平衡之道:从原理、变色、旋转到完整实现代码
大数据·开发语言·c++·人工智能·红黑树
l1t1 天前
利用DeepSeek优化SQLite求解数独SQL用于DuckDB
开发语言·数据库·sql·sqlite·duckdb
_OP_CHEN1 天前
C++进阶:(七)红黑树深度解析与 C++ 实现
开发语言·数据结构·c++·stl·红黑树·红黑树的旋转·红黑树的平衡调整
硅农深芯1 天前
如何使用ptqt5实现进度条的动态显示
开发语言·python·qt
Lhan.zzZ1 天前
Qt数据可视化实战:饼图、线图与表格的完整指南
开发语言·qt·信息可视化
Acrelhuang1 天前
筑牢用电防线:Acrel-1000 自动化系统赋能 35kV 园区高效供电-安科瑞黄安南
java·大数据·开发语言·人工智能·物联网
小龙报1 天前
《算法通关指南数据结构和算法篇(4)--- 队列和queue》
c语言·开发语言·数据结构·c++·创业创新·学习方法·visual studio
民乐团扒谱机1 天前
深入浅出理解克尔效应(Kerr Effect)及 MATLAB 仿真实现
开发语言·matlab·光学·非线性光学·克尔效应·kerr effect