Go语言通过encoding/json包实现JSON读写,先定义结构体并用json标签映射字段,使用ioutil.ReadFile读取文件后由json.Unmarshal解析到结构体;写入时用json.MarshalIndent序列化结构体,再通过ioutil.WriteFile保存为格式化JSON文件;对于动态结构可用map[string]interface{}接收数据并配合类型断言处理;最终可封装为LoadConfig和SaveConfig函数用于配置管理,需注意错误处理与标签正确性。

在Go语言开发中,处理JSON数据是常见需求,尤其是在配置文件读写、API数据交互等场景。Golang标准库中的encoding/json包提供了完整的JSON编码与解码支持,结合os和io相关操作,可以轻松实现JSON文件的读取与写入。
要从JSON文件中读取数据,先定义一个与JSON结构匹配的结构体,然后使用json.Unmarshal将文件内容反序列化。
假设有一个config.json文件:
{
"name": "Alice",
"age": 30,
"active": true,
"tags": ["developer", "go", "backend"]
}
对应的Go结构体和读取代码如下:
立即学习“go语言免费学习笔记(深入)”;
package main
import (
"encoding/json"
"io/ioutil"
"log"
)
type Config struct {
Name string `json:"name"`
Age int `json:"age"`
Active bool `json:"active"`
Tags []string `json:"tags"`
}
func readJSON() {
data, err := ioutil.ReadFile("config.json")
if err != nil {
log.Fatalf("读取文件失败: %v", err)
}
var config Config
err = json.Unmarshal(data, &config)
if err != nil {
log.Fatalf("解析JSON失败: %v", err)
}
<strong>log.Printf("读取结果: %+v", config)</strong>
}
ioutil.ReadFile一次性读取整个文件内容,json.Unmarshal将其解析为结构体实例。注意结构体字段需导出(首字母大写),并使用json:标签对应JSON字段名。
将Go结构体数据保存为JSON文件,使用json.Marshal或json.MarshalIndent序列化,再通过ioutil.WriteFile写入磁盘。
func writeJSON() {
config := Config{
Name: "Bob",
Age: 25,
Active: false,
Tags: []string{"tester", "qa"},
}
// 使用 MarshalIndent 生成格式化JSON
data, err := json.MarshalIndent(config, "", " ")
if err != nil {
log.Fatalf("序列化失败: %v", err)
}
err = ioutil.WriteFile("output.json", data, 0644)
if err != nil {
log.Fatalf("写入文件失败: %v", err)
}
<strong>log.Println("JSON文件写入成功")</strong>
}
json.MarshalIndent可生成带缩进的易读JSON,第二个参数为前缀(通常为空),第三个为缩进字符(如两个空格)。
当JSON结构不确定时,可以用map[string]interface{}或interface{}接收数据。
func readDynamicJSON() {
data, err := ioutil.ReadFile("config.json")
if err != nil {
log.Fatal(err)
}
var raw map[string]interface{}
err = json.Unmarshal(data, &raw)
if err != nil {
log.Fatal(err)
}
<strong>for k, v := range raw {
log.Printf("%s: %v (%T)", k, v, v)
}</strong>
}
这种方式适合处理配置项不固定或第三方接口返回结构多变的情况。注意类型断言的使用,比如v.(float64)处理数字(JSON中数字默认解析为float64)。
将读写操作整合,实现一个简单的配置管理功能:
func main() {
readJSON()
writeJSON()
}
确保项目根目录下存在config.json,运行程序后会生成output.json。实际项目中可封装成LoadConfig和SaveConfig函数,提升复用性。
基本上就这些。Golang的encoding/json设计简洁高效,配合文件IO能快速完成JSON持久化操作,适合大多数配置和数据交换场景。注意错误处理和结构体标签的正确使用,避免解析失败。
以上就是Golang如何操作JSON文件_Golang encoding/json文件读写实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号