gpt4 book ai didi

json - Golang : Convert to JSON. GZ 并写入文件

转载 作者:IT王子 更新时间:2023-10-29 01:25:29 26 4
gpt4 key购买 nike

尝试用我的数据完成以下输出:

  1. 转换为 JSON 字符串并写入文件:output.json(这部​​分工作)
  2. Gzip 压缩 JSON 字符串并将其写入 json.gz 文件:output.json.gz(不工作)

代码运行良好并写入两个文件。但是当我尝试解压缩 gzip 文件时出现此错误:“output.json”中的数据错误。文件已损坏

代码如下:

package main

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

type Generic struct {
Name string
Cool bool
Rank int
}

func main() {
generic := Generic{"Golang", true, 100}
fileJson, _ := json.Marshal(generic)
err := ioutil.WriteFile("output.json", fileJson, 0644)
if err != nil {
fmt.Printf("WriteFileJson ERROR: %+v", err)
}

var fileGZ bytes.Buffer
zipper := gzip.NewWriter(&fileGZ)
defer zipper.Close()
_, err = zipper.Write([]byte(string(fileJson)))
if err != nil {
fmt.Printf("zipper.Write ERROR: %+v", err)
}
err = ioutil.WriteFile("output.json.gz", []byte(fileGZ.String()), 0644)
if err != nil {
fmt.Printf("WriteFileGZ ERROR: %+v", err)
}
}

我错过了什么?

最佳答案

写入完成后需要立即调用zipper.Close()

http://play.golang.org/p/xNeMg3aXxO

_, err = zipper.Write(fileJson)
if err != nil {
log.Fatalf("zipper.Write ERROR: %+v", err)
}
err := zipper.Close() // call it explicitly and check error

调用 defer zipper.Close() 会在主函数结束时触发调用。在您调用 .Close() 之前,数据被写入中间缓冲区,而不是刷新到实际文件。

关于json - Golang : Convert to JSON. GZ 并写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25372506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com