web-dev-qa-db-fra.com

Golang analyse le tableau JSON dans la structure de données

J'essaie d'analyser un fichier qui contient des données JSON:

[
  {"a" : "1"},
  {"b" : "2"},
  {"c" : "3"}
]

Comme il s'agit d'un tableau JSON avec des clés dynamiques, j'ai pensé que je pouvais utiliser:

type data map[string]string

Cependant, je ne peux pas analyser le fichier en utilisant un map:

c, _ := ioutil.ReadFile("c")
dec := json.NewDecoder(bytes.NewReader(c))
var d data
dec.Decode(&d)


json: cannot unmarshal array into Go value of type main.data

Quelle serait la façon la plus simple d'analyser un fichier contenant des données JSON est un tableau (uniquement des types chaîne à chaîne) dans une structure Go?

EDIT: Pour approfondir la réponse acceptée - il est vrai que mon JSON est un tableau de cartes. Pour que mon code fonctionne, le fichier doit contenir:

{
  "a":"1",
  "b":"2",
  "c":"3"
}

Ensuite, il peut être lu dans un map[string]string

28
Kiril

C'est parce que votre json est en fait un tableau de cartes, mais vous essayez de démasquer juste un map. Essayez d'utiliser les éléments suivants:

type YourJson struct {
    YourSample []struct {
        data map[string]string
    } 
}
14
Steve P.

Essayez ceci: http://play.golang.org/p/8nkpAbRzAD

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
)

type mytype []map[string]string

func main() {
    var data mytype
    file, err := ioutil.ReadFile("test.json")
    if err != nil {
        log.Fatal(err)
    }
    err = json.Unmarshal(file, &data)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(data)
}
21
Marko Kevac

vous pouvez essayer le package simplejson du bitly
https://github.com/bitly/go-simplejson

c'est beaucoup plus facile.

4
JessonChan