为了账号安全,请及时绑定邮箱和手机立即绑定

自己结构数组的 JSON 编码

自己结构数组的 JSON 编码

Go
慕神8447489 2021-11-15 15:53:49
我尝试读取一个目录并从文件条目中生成一个 JSON 字符串。但是 json.encoder.Encode() 函数只返回空对象。为了测试,我在 tmp 目录中有两个文件:test1.js  test2.js go程序是这样的:package mainimport (    "encoding/json"    "fmt"    "os"    "path/filepath"    "time")type File struct {    name      string    timeStamp int64}func main() {    files := make([]File, 0, 20)    filepath.Walk("/home/michael/tmp/", func(path string, f os.FileInfo, err error) error {        if f == nil {            return nil        }        name := f.Name()        if len(name) > 3 {            files = append(files, File{                name:      name,                timeStamp: f.ModTime().UnixNano() / int64(time.Millisecond),            })            // grow array if needed            if cap(files) == len(files) {                newFiles := make([]File, len(files), cap(files)*2)                for i := range files {                    newFiles[i] = files[i]                }                files = newFiles            }        }        return nil    })    fmt.Println(files)    encoder := json.NewEncoder(os.Stdout)    encoder.Encode(&files)}它产生的输出是:[{test1.js 1444549471481} {test2.js 1444549481017}][{},{}]为什么 JSON 字符串为空?
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

它不起作用,因为文件结构中的任何字段都没有导出。


以下工作正常:


package main


import (

    "encoding/json"

    "fmt"

    "os"

    "path/filepath"

    "time"

)


type File struct {

    Name      string

    TimeStamp int64

}


func main() {


    files := make([]File, 0, 20)


    filepath.Walk("/tmp/", func(path string, f os.FileInfo, err error) error {


        if f == nil {

            return nil

        }


        name := f.Name()

        if len(name) > 3 {

            files = append(files, File{

                Name:      name,

                TimeStamp: f.ModTime().UnixNano() / int64(time.Millisecond),

            })


            // grow array if needed

            if cap(files) == len(files) {

                newFiles := make([]File, len(files), cap(files)*2)

                for i := range files {

                    newFiles[i] = files[i]

                }

                files = newFiles

            }

        }

        return nil

    })


    fmt.Println(files)

    encoder := json.NewEncoder(os.Stdout)

    encoder.Encode(&files)

}



查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信