Golang中如何将JSON数据写入文件

Golang中如何将JSON数据写入文件 你好, 我正在从一个端点收集一些JSON数据。我可以将其打印到屏幕上:

fmt.Printf("%s\n", bodyText)

但我一直无法弄清楚如何将 bodyText 写入文件。

非常感谢任何帮助。

2 回复

如果你指的是不知道如何打开一个文件,我建议查阅 os.Createos.OpenFile。如果你指的是如何将数据写入文件,我建议查阅 fmt.Fprintln。如果你指的是其他问题,能否详细说明一下你遇到的困难?

更多关于Golang中如何将JSON数据写入文件的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中将JSON数据写入文件有多种方法。以下是几种常见的方式:

方法1:使用ioutil.WriteFile(Go 1.16+推荐使用os.WriteFile)

package main

import (
    "fmt"
    "os"
)

func main() {
    // 假设bodyText是从端点获取的JSON数据
    bodyText := `{"name":"John","age":30,"city":"New York"}`
    
    // 将JSON数据写入文件
    err := os.WriteFile("data.json", []byte(bodyText), 0644)
    if err != nil {
        fmt.Printf("写入文件失败: %v\n", err)
        return
    }
    
    fmt.Println("JSON数据已成功写入data.json")
}

方法2:使用os.Create和WriteString

package main

import (
    "fmt"
    "os"
)

func main() {
    bodyText := `{"name":"Alice","age":25,"city":"London"}`
    
    // 创建文件
    file, err := os.Create("output.json")
    if err != nil {
        fmt.Printf("创建文件失败: %v\n", err)
        return
    }
    defer file.Close()
    
    // 写入JSON数据
    _, err = file.WriteString(bodyText)
    if err != nil {
        fmt.Printf("写入数据失败: %v\n", err)
        return
    }
    
    fmt.Println("JSON数据已成功写入output.json")
}

方法3:使用bufio.Writer(适合大量数据)

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    bodyText := `{"users":[{"name":"Bob","age":35},{"name":"Charlie","age":28}]}`
    
    file, err := os.Create("users.json")
    if err != nil {
        fmt.Printf("创建文件失败: %v\n", err)
        return
    }
    defer file.Close()
    
    writer := bufio.NewWriter(file)
    _, err = writer.WriteString(bodyText)
    if err != nil {
        fmt.Printf("写入数据失败: %v\n", err)
        return
    }
    
    // 确保所有数据都写入文件
    writer.Flush()
    
    fmt.Println("JSON数据已成功写入users.json")
}

方法4:如果bodyText是[]byte类型

package main

import (
    "fmt"
    "os"
)

func main() {
    // 假设bodyText是[]byte类型
    bodyText := []byte(`{"product":"Laptop","price":999.99,"inStock":true}`)
    
    err := os.WriteFile("product.json", bodyText, 0644)
    if err != nil {
        fmt.Printf("写入文件失败: %v\n", err)
        return
    }
    
    fmt.Println("JSON数据已成功写入product.json")
}

方法5:格式化JSON后写入

package main

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

func main() {
    // 原始JSON字符串
    bodyText := `{"name":"David","age":40,"city":"Tokyo"}`
    
    // 解析并格式化JSON
    var data map[string]interface{}
    json.Unmarshal([]byte(bodyText), &data)
    
    // 格式化JSON
    formattedJSON, err := json.MarshalIndent(data, "", "  ")
    if err != nil {
        fmt.Printf("格式化JSON失败: %v\n", err)
        return
    }
    
    // 写入格式化后的JSON
    err = os.WriteFile("formatted.json", formattedJSON, 0644)
    if err != nil {
        fmt.Printf("写入文件失败: %v\n", err)
        return
    }
    
    fmt.Println("格式化后的JSON数据已成功写入formatted.json")
}

选择哪种方法取决于你的具体需求:

  • 简单场景:使用os.WriteFile
  • 需要格式化:使用方法5
  • 处理大文件:使用bufio.Writer
  • 需要更多控制:使用os.Create配合写入方法
回到顶部