Question simple: comment analyser une chaîne (qui est un tableau) dans Go en utilisant le package json?
type JsonType struct{
Array []string
}
func main(){
dataJson = `["1","2","3"]`
arr := JsonType{}
unmarshaled := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v", unmarshaled)
}
valeur de retour de Unmarshal
est une erreur, et voici ce que vous imprimez:
// Return value type of Unmarshal is error.
err := json.Unmarshal([]byte(dataJson), &arr)
Vous pouvez également vous débarrasser de JsonType
et utiliser simplement une tranche:
package main
import (
"encoding/json"
"log"
)
func main() {
dataJson := `["1","2","3"]`
var arr []string
_ = json.Unmarshal([]byte(dataJson), &arr)
log.Printf("Unmarshaled: %v", arr)
}
// prints out:
// 2009/11/10 23:00:00 Unmarshaled: [1 2 3]
Code sur le jeu: https://play.golang.org/p/GNWlylavam
Remarque: Cette réponse a été écrite avant la modification de la question. Dans la question d'origine&arr
A été transmis à json.Unmarshal()
:
unmarshaled := json.Unmarshal([]byte(dataJson), &arr)
Vous passez l'adresse de arr
à json.Unmarshal()
pour démarsaler un tableau JSON, mais arr
n'est pas un tableau (ou une tranche), c'est une valeur de structure.
Les tableaux peuvent être démêlés en tableaux ou tranches Go. Passez donc arr.Array
:
dataJson := `["1","2","3"]`
arr := JsonType{}
err := json.Unmarshal([]byte(dataJson), &arr.Array)
log.Printf("Unmarshaled: %v, error: %v", arr.Array, err)
Sortie (essayez-le sur le Go Playground ):
2009/11/10 23:00:00 Unmarshaled: [1 2 3], error: <nil>
Bien sûr, vous n'avez même pas besoin du wrapper JsonType
, utilisez simplement une simple tranche []string
:
dataJson := `["1","2","3"]`
var s []string
err := json.Unmarshal([]byte(dataJson), &s)