2015-12-05 2 views
0

Я работаю над кодом, который сканирует репертуар в структуру, чтобы экспортировать его в json.Маршал возвращает пустой json моей структуры

В настоящее время мой код сканирует тонкий репертуар с помощью функции ScanDir, но когда я пытаюсь маршал моей структуры, он возвращает {}.

// file's struct 
type Fic struct { 
    nom  string `json:"fileName"` 
    lon  int64  `json:"size"` 
    tim  time.Time `json:"lastFileUpdate"` 
    md5hash []byte `json:"md5"` 
} 

// folder's struct 
type Fol struct { 
    subFol []Fol  `json:"listFolders"` 
    files []Fic  `json:"listFiles"` 
    nom string `json:"folderName"` 
    tim time.Time `json:"lastFolderUpdate"` 
} 

func main() { 
    var root Fol 
    err := ScanDir("./folder", &root) // scan a folder and fill my struct 
    check(err) 
    b, err := json.Marshal(root) 
    check(err) 
    os.Stdout.Write(b) 
} 

func check(err error) { 
if err != nil { 
    fmt.Fprintf(os.Stderr, "Fatal error : %s", err.Error()) 
    os.Exit(1) 
} 
+1

Возможный дубликат [Go json.Marshal (STRUCT) возвращает "{}"] (http://stackoverflow.com/questions/26327391/go-json-marshalstruct-returns) –

ответ

4

Для того, чтобы маршал и демонтаж json, поля/свойство структуры должны быть общедоступными. Чтобы сделать поле/свойство структуры public, оно должно начинаться с верхнего регистра. В ваших полях все в нижнем регистре.

type Fic struct { 
    Nom  string `json:"fileName"` 
    Lon  int64  `json:"size"` 
    Tim  time.Time `json:"lastFileUpdate"` 
    Md5hash []byte `json:"md5"` 
} 

// folder's struct 
type Fol struct { 
    SubFol []Fol  `json:"listFolders"` 
    Files []Fic  `json:"listFiles"` 
    Nom string `json:"folderName"` 
    Tim time.Time `json:"lastFolderUpdate"` 
} 
+0

Спасибо, это работает ! :) – kindermoumoute

+0

Ничего себе, это тонкое. –

Смежные вопросы