web-dev-qa-db-fra.com

Analyser le tableau JSON à Golang

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)
}
15
kingSlayer

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

22
miku

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)
7
icza