2016-08-10 6 views
3

Einfache Frage: Wie analysiert man eine Zeichenfolge (die ein Array ist) in Go mit JSON-Paket?Parse JSON-Array in Golang

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

Antwort

7

Die return value von Unmarshal ist ein Fehler, und das ist, was Sie ausdrucken:

// wrong, unmarshaled is actually the error 
unmarshaled := json.Unmarshal([]byte(dataJson), &arr) 

Sie können auch von der JsonType loszuwerden und benutzen Sie einfach eine Scheibe:

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 auf Spiel: https://play.golang.org/p/GNWlylavam

2

Hinweis: Diese Antwort wurde geschrieben, bevor die Frage bearbeitet wurde. Im original question&arr zu json.Unmarshal() geben wurde:

unmarshaled := json.Unmarshal([]byte(dataJson), &arr) 

Sie passieren eine JSON Array unmarshal, die Adresse des arr zu json.Unmarshal() aber arr kein Array (oder Scheibe), ist es ein struct Wert.

Arrays können in Go Arrays oder Slices entpackt werden. So passieren arr.Array:

dataJson := `["1","2","3"]` 
arr := JsonType{} 
err := json.Unmarshal([]byte(dataJson), &arr.Array) 
log.Printf("Unmarshaled: %v, error: %v", arr.Array, err) 

Output (versuchen Sie es auf dem Go Playground):

2009/11/10 23:00:00 Unmarshaled: [1 2 3], error: <nil> 

Natürlich Sie brauchen noch nicht einmal die JsonType Wrapper, verwenden Sie nur eine einfache []string Scheibe:

dataJson := `["1","2","3"]` 
var s []string 
err := json.Unmarshal([]byte(dataJson), &s) 
+0

Ich habe vergessen, dass ich die Adresse übergeben, und es gedacht gab das geparste Array zurück, so dass das Ergebnis war, weil es der Wert des Fehlers war, Schande über mich. – kingSlayer

+0

@kingSlayer Sie müssen die Adresse der Variablen übergeben, damit das 'json'-Paket direkt in Ihre Variable entpacken kann. Das Ergebnis muss nicht zurückgegeben werden, aber der optionale Fehler muss sein. – icza

+0

Also mein Problem war, dass ich den Wert des Fehlers ausgedruckt habe und nicht den angegebenen Wert des arr.Array, das war die Verwirrung für mich, Danke. – kingSlayer