当前位置:网站首页>Go语言JSON文件的读写操作
Go语言JSON文件的读写操作
2022-08-10 01:51:00 【wangwei830】
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。
JSON 是一种使用 UTF-8 编码的纯文本格式,采用完全独立于语言的文本格式,由于写起来比 XML 格式方便,并且更为紧凑,同时所需的处理时间也更少,致使 JSON 格式越来越流行,特别是在通过网络连接传送数据方面。
开发人员可以使用 JSON 传输简单的字符串、数字、布尔值,也可以传输一个数组或者一个更复杂的复合结构。在 Web 开发领域中,JSON 被广泛应用于 Web 服务端程序和客户端之间的数据通信。
Go语言内建对 JSON 的支持,使用内置的 encoding/json 标准库,开发人员可以轻松使用Go程序生成和解析 JSON 格式的数据。
JSON 结构如下所示:
{
"key1":"value1","key2":value2,"key3":["value3","value4","value5"]}
写 JSON 文件
使用Go语言创建一个 json 文件非常方便,示例代码如下:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Website struct {
Name string `xml:"name,attr"`
Url string
Course []string
}
func main() {
info := []Website{
{
"Golang", "http://c.biancheng.net/golang/", []string{
"http://c.biancheng.net/cplus/", "http://c.biancheng.net/linux_tutorial/"}}, {
"Java", "http://c.biancheng.net/java/", []string{
"http://c.biancheng.net/socket/", "http://c.biancheng.net/python/"}}}
// 创建文件
filePtr, err := os.Create("info.json")
if err != nil {
fmt.Println("文件创建失败", err.Error())
return
}
defer filePtr.Close()
// 创建Json编码器
encoder := json.NewEncoder(filePtr)
err = encoder.Encode(info)
if err != nil {
fmt.Println("编码错误", err.Error())
} else {
fmt.Println("编码成功")
}
}
运行上面的代码会在当前目录下生成一个 info.json 文件,文件内容如下:
[
{
"Name":"Golang",
"Url":"http://c.biancheng.net/golang/",
"Course":[
"http://c.biancheng.net/golang/102/",
"http://c.biancheng.net/golang/concurrent/"
]
},
{
"Name":"Java",
"Url":"http://c.biancheng.net/java/",
"Course":[
"http://c.biancheng.net/java/10/",
"http://c.biancheng.net/python/"
]
}
]
读 JSON 文件
读 JSON 数据与写 JSON 数据一样简单,示例代码如下:
package main
import (
"encoding/json"
"fmt"
"os"
)
type Website struct {
Name string `xml:"name,attr"`
Url string
Course []string
}
func main() {
filePtr, err := os.Open("./info.json")
if err != nil {
fmt.Println("文件打开失败 [Err:%s]", err.Error())
return
}
defer filePtr.Close()
var info []Website
// 创建json解码器
decoder := json.NewDecoder(filePtr)
err = decoder.Decode(&info)
if err != nil {
fmt.Println("解码失败", err.Error())
} else {
fmt.Println("解码成功")
fmt.Println(info)
}
}
运行结果如下:
go run main.go
解码成功
[{
Golang http://c.biancheng.net/golang/ [http://c.biancheng.net/golang/102/ http://c.biancheng.net/golang/concurrent/]} {
Java http://c.biancheng.net/java/ [http://c.biancheng.net/java/10/ http://c.biancheng.net/python/]}]
顺便提一下,还有一种叫做 BSON (Binary JSON) 的格式与 JSON 非常类似,与 JSON 相比,BSON 着眼于提高存储和扫描效率。BSON 文档中的大型元素以长度字段为前缀以便于扫描。在某些情况下,由于长度前缀和显式数组索引的存在,BSON 使用的空间会多于 JSON。
边栏推荐
猜你喜欢
随机推荐
unity 报错 Unsafe code may only appear if compiling with /unsafe. Enable “Allow ‘unsafe‘ code“ in Pla
.Net面试经验总结
Screen 拆分屏幕
如何让数据库中的数据同步
one of the variables needed for gradient computation has been modified by an inplace
Shader Graph learns various special effects cases
墨西哥大众VW Mexico常见的几种label
Fusion Compute网络虚拟化
SonarQube升级记录:7.8->7.9->8.9
Process management and task management
Unity reports Unsafe code may only appear if compiling with /unsafe. Enable “Allow ‘unsafe’ code” in Pla
【每日一题】1413. 逐步求和得到正数的最小值
算法与语音对话方向面试题库
Shader Graph学习各种特效案例
Visual low-code system practice based on design draft identification
微透镜阵列的高级模拟
中文NER的SOTA:RICON
OpenCV图像处理学习四,像素的读写操作和图像反差函数操作
Web性能测试模型小结
2022金九银十工作潮,怎么样才能成功跳槽面试拿到高薪呢?





![[转] Typora_Markdown_图片标题(题注)](/img/67/589eed8de86bff9fc017ae7c409410.png)



