web-dev-qa-db-fra.com

Comment analyser un fichier JSON dans une structure avec Go

J'essaie de configurer mon programme Go en créant un fichier JSON et en l'analysant dans une structure:

var settings struct {
    serverMode bool
    sourceDir  string
    targetDir  string
}

func main() {

    // then config file settings

    configFile, err := os.Open("config.json")
    if err != nil {
        printError("opening config file", err.Error())
    }

    jsonParser := json.NewDecoder(configFile)
    if err = jsonParser.Decode(&settings); err != nil {
        printError("parsing config file", err.Error())
    }

    fmt.Printf("%v %s %s", settings.serverMode, settings.sourceDir, settings.targetDir)
    return
}

Le fichier config.json:

{
    "serverMode": true,
    "sourceDir": ".",
    "targetDir": "."
}

Le programme se compile et s'exécute sans aucune erreur, mais l'instruction d'impression affiche:

false  

(faux et deux chaînes vides)

J'ai également essayé avec json.Unmarshal(..) mais j'ai eu le même résultat.

Comment analyser le JSON d'une manière qui remplit les valeurs de structure?

31
Charles

Vous n'exportez pas vos éléments de structure. Ils commencent tous par une lettre minuscule.

var settings struct {
    ServerMode bool `json:"serverMode"`
    SourceDir  string `json:"sourceDir"`
    TargetDir  string `json:"targetDir"`
}

Faites la première lettre de vos éléments de structure en majuscule pour les exporter. L'encodeur/décodeur JSON n'utilisera pas d'éléments struct qui ne sont pas exportés.

39
Daniel