[go] Go에서 JSON 데이터 압축 및 해제하기

Go는 JSON 형식의 데이터를 압축하거나 해제하는 데 사용할 수 있는 표준 라이브러리를 제공합니다. 이 포스트에서는 Go에서 JSON 데이터의 압축 및 해제를 처리하는 방법에 대해 알아보겠습니다.

JSON 데이터 압축

JSON 데이터를 압축하기 위해서는 encoding/json 패키지와 compress/gzip 패키지를 사용할 수 있습니다. 먼저, 구조체나 맵 등의 데이터를 JSON으로 마샬링한 후, gzip을 사용하여 압축할 수 있습니다.

다음은 JSON 데이터를 압축하는 예제입니다.

package main

import (
	"bytes"
	"compress/gzip"
	"encoding/json"
	"fmt"
)

type Data struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email"`
}

func main() {
	data := Data{Name: "John Doe", Age: 30, Email: "john@example.com"}

	jsonData, err := json.Marshal(data)
	if err != nil {
		fmt.Println("Error marshalling JSON:", err)
		return
	}

	var buf bytes.Buffer
	zw := gzip.NewWriter(&buf)
	_, err = zw.Write(jsonData)
	if err != nil {
		fmt.Println("Error compressing JSON:", err)
		return
	}

	zw.Close()

	fmt.Println("Compressed JSON data:", buf.Bytes())
}

위의 예제에서는 Data 구조체를 JSON으로 마샬링한 후, compress/gzip 패키지를 사용하여 압축된 데이터를 출력하고 있습니다.

JSON 데이터 해제

이제 우리는 압축된 JSON 데이터를 해제할 차례입니다. Go에서는 compress/gzip 패키지를 사용하여 JSON 데이터를 압축 해제할 수 있습니다.

다음은 JSON 데이터를 압축 해제하는 예제입니다.

package main

import (
	"bytes"
	"compress/gzip"
	"encoding/json"
	"fmt"
)

type Data struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email"`
}

func main() {
	compressedData := []byte{31, 139, 8, 0, 0, 0, 0, 0, 0, 255, 11, 202, 96, 32, 16, 68, 19, 202, 8, 21, 74, 46, 139, 47, 22, 105, 23, 72, 194, 33, 76, 202, 35, 208, 81, 86, 74, 80, 63, 89, 26, 132, 70, 178, 2, 239, 36, 126, 80, 85, 93, 46, 106, 64, 239, 181, 244, 45, 75, 125, 174, 4, 90, 146, 94, 161, 185, 203, 68, 4, 53, 192, 213, 14, 197, 103, 101, 47, 89, 126, 122, 20, 175, 169, 97, 181, 70, 154, 91, 92, 21, 101, 172, 212, 106, 199, 162, 25, 0, 0, 0}

	buf := bytes.NewReader(compressedData)
	zr, err := gzip.NewReader(buf)
	if err != nil {
		fmt.Println("Error creating gzip reader:", err)
		return
	}
	defer zr.Close()

	var jsonData bytes.Buffer
	_, err = jsonData.ReadFrom(zr)
	if err != nil {
		fmt.Println("Error decompressing JSON:", err)
		return
	}

	var data Data
	err = json.Unmarshal(jsonData.Bytes(), &data)
	if err != nil {
		fmt.Println("Error unmarshalling JSON:", err)
		return
	}

	fmt.Println("Uncompressed JSON data:", data)
}

위의 예제에서는 압축된 JSON 데이터를 compress/gzip 패키지를 사용하여 해제한 후, JSON으로 언마샬링하여 출력하고 있습니다.

이제 여러분은 Go에서 JSON 데이터를 압축하고 해제하는 방법에 대해 알게 되었습니다!