将一个Go语言中结构体slice转为JSON的过程叫编组(marshaling),通过调用json.Marshal函数完成编码,编码的逆操作是解码,对应将JSON数据解码为Go语言的数据结构,Go语言中一般叫unmarshaling,通过调用 json.Unmarshaling函数完成解码;
package main
import (
"encoding/json"
"fmt"
"time"
)
type Article struct {
ID uint
Title string
Filename string `json:"filename,omitempty"`
AuthorId uint `json:"authorId"`
CreatedAt time.Time
UpdatedAt time.Time
}
func main() {
var articles = []Article{
{Title: "文章标题1", Filename: "article.text", AuthorId: 123},
{Title: "文章标题1", AuthorId: 123},
}
data, _ := json.Marshal(articles)
fmt.Printf("%s\n", data)
}
输入出结果如下:
[{"ID":0,"Title":"文章标题1","filename":"article.text","authorId":123},{"ID":0,"Title":"文章标题1","authorId":123}]json.MarshalIndent//data, _ := json.Marshal(articles)
data, _ := json.MarshalIndent(articles, "", " ")
替换后输出结果如下:
[
{
"ID": 0,
"Title": "文章标题1",
"filename": "article.text",
"authorId": 123
},
{
"ID": 0,
"Title": "文章标题1",
"authorId": 123
}
]ArticleFilenameAuthorIdFilenameAuthorIdomitempty下面的代码将JSON格式的数据解码为一个结构体
var articles2 []Article
var err error
err = json.Unmarshal(data, &articles2)
fmt.Println(articles2) // [{0 文章标题1 article.text 123} {0 文章标题1 123}]
json.Unmarshal[]byteinterface{}