将一个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
    }
]
ArticleFilenameAuthorId
FilenameAuthorIdomitempty

下面的代码将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{}