2016-04-18 17 views
1

Ich versuche eine Map [] in JSON zu konvertieren, damit ich sie als Teil einer Anfrage veröffentlichen kann. Aber meine Karte [] hat verschiedene Typen einschließlich Strings/Ints.Golang - Array/Map zu JSON konvertieren

Ich habe derzeit:

mapD := map[string]string{"deploy_status": "public", "status": "live", "version": 2} 
mapB, _ := json.Marshal(mapD) 
fmt.Println(string(mapB)) 

//output 
prog.go:17: cannot use 2 (type int) as type string in map value 

Wie kann ich es so machen, dass ich Strings und Ints innerhalb derselben Karte enthalten kann?

Dank

Antwort

4

Verwenden Karte [string] Schnittstelle {}:

mapD := map[string]interface{}{"deploy_status": "public", "status": "live", "version": 2} 

playground

+0

Danke Ich habe die {} vor dem Öffnen der {} wieder :) –

1

Sie versuchen, einen Wert vom Typ int als String zu verwenden, aber Ihre Karte wird als [string]string definiert. Sie haben die erste Zeile zu modifizieren, wie:

mapD := map[string]string{"deploy_status": "public", "status": "live", "version": "2"} 

Wenn Sie die Art des Wertes nicht kennen, Sie interface{} stattdessen verwenden können.

+0

Ich kann die int in einen String ändern, wie dies auf der Anforderungsseite ungültig wäre, so ist es ein int bleiben muss . –

+0

Wenn ich die Schnittstelle Version: mapD: = Karte [Zeichenfolge] Schnittstelle {"deploy_status": "öffentliche", "Status": "live", "Version": 2} mapB, _: = json.Marshal (mapD) fmt.Println (string (mapB)) Ich bekomme den Fehler: Syntaxfehler: Unerwarteter String Literal –

+0

Ja, weil Sie die Schnittstelle nicht korrekt initialisieren. Sie sollten 'map [string] interface {verwenden } {...} ' –