golang:Marshal [] os.FileInfo成JSON

lan*_*ng2 3 json go

基本上,我想要实现的是获取目录的内容,os.ReadDir()然后将结果编码为json.

直接做的事情json.Marshal()没有例外,但给了我一个空洞的结果.

所以我尝试了这个:

func (f *os.FileInfo) MarshalerJSON() ([]byte, error) {
    return f.Name(), nil
}
Run Code Online (Sandbox Code Playgroud)

然后Go告诉我这os.FileInfo()是一个接口,不能以这种方式扩展.

最好的方法是什么?

Jim*_*imB 5

将数据打包到可以序列化的结构中:

http://play.golang.org/p/qDeg2bfik_

type FileInfo struct {
    Name    string
    Size    int64
    Mode    os.FileMode
    ModTime time.Time
    IsDir   bool
}

func main() {
    dir, err := os.Open(".")
    if err != nil {
        log.Fatal(err)
    }
    entries, err := dir.Readdir(0)
    if err != nil {
        log.Fatal(err)
    }

    list := []FileInfo{}

    for _, entry := range entries {
        f := FileInfo{
            Name:    entry.Name(),
            Size:    entry.Size(),
            Mode:    entry.Mode(),
            ModTime: entry.ModTime(),
            IsDir:   entry.IsDir(),
        }
        list = append(list, f)
    }

    output, err := json.Marshal(list)
    if err != nil {
        log.Fatal(err)
    }
    log.Println(string(output))

}
Run Code Online (Sandbox Code Playgroud)