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}

相关推荐
YONG823_API4 分钟前
电商大数据的几种获取渠道分享!
大数据·开发语言·数据库·爬虫·数据挖掘·数据分析
薔薇十字5 分钟前
【代码随想录day62】【C++复健】 97. 小明逛公园(Floyd 算法精讲);127. 骑士的攻击(A * 算法精讲)
开发语言·c++·算法
Sunyanhui112 分钟前
牛客网 SQL5将查询后的列重新命名
java·开发语言
SUN_Gyq30 分钟前
C++如何实现对象的克隆?如何实现单例模式?
java·开发语言·jvm·c++·算法
小黄银技术栈44 分钟前
校园点餐订餐外卖跑腿Java源码
java·开发语言
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇11】一个标准 C# 程序介绍、新的值类型——枚举
开发语言·vscode·unity·c#·游戏引擎
安年CJ1 小时前
Python 中的指针:深入理解与应用
运维·开发语言·python
我是Superman丶1 小时前
【自动化】Python SeleniumUtil 油猴 工具 自动安装用户脚本
开发语言·python
抓哇FullStack-Junior1 小时前
设计模式——原型模式
java·开发语言·设计模式·原型模式
墨绿色的摆渡人2 小时前
用 Python 从零开始创建神经网络(十七):回归(Regression)
开发语言·人工智能·python·深度学习·神经网络·回归