无法将文本解编为struct

Trying to unmarshal a json text into my own struct. My struct definitions seem correct but json.Unmarshal doesn't return anything.

package main

import (
    "encoding/json"
    "fmt"
)

type CmdUnit struct {
    Command     string
    Description string
}

type CmdList struct {
    ListOfCommands []CmdUnit
}

type OneCmdList struct {
    Area    string
    CmdList CmdList
}

type AllCommands struct {
    AllAreas []OneCmdList
}

func main() {
    jsonTxt := `
    {
        "Area1": [{
                "Command": "cmd1",
                "Desc": "cmd1 desc"
        }, {
                "Command": "cmd2",
                "Desc": "cmd2 desc"
        }],
        "Area2": [{
                "Command": "cmd1",
                "Desc": "cmd1 desc"
        }]

}
`
    cmds := AllCommands{}
    if err := json.Unmarshal([]byte(jsonTxt), &cmds); err != nil {
        fmt.Println("Failed to unmarshal:", err)
    } else {
        fmt.Printf("%+v
", cmds)
    }
}


$ go run j.go
{AllAreas:[]}

Your structs have a different structure from the json you're providing. Marshalling the structs in your example would result in json that looks like:

{
  "AllAreas": [
    {
      "Area": "Area1",
      "CmdList": {
        "ListOfCommands": [
          {
            "Command": "cmd1",
            "Description": "cmd1 desc"
          },
          {
            "Command": "cmd2",
            "Description": "cmd2 desc"
          }
        ]
      }
    }
  ]
}

The json in your example can be unmarshaled directly into a map[string][]CmdUnit{} with the minor change of CmdUnit.Description to CmdUnit.Desc.

cmds := map[string][]CmdUnit{}
if err := json.Unmarshal(jsonTxt, &cmds); err != nil {
    log.Fatal("Failed to unmarshal:", err)
}
fmt.Printf("%+v
", cmds)

https://play.golang.org/p/DFLYAfNLES