2016-10-22 4 views
0

Ich verwende Polymer Google Charts. Ich möchte JSON für einen einzelnen Controller.ServeJSON-Aufruf erstellen, aber zwei, wenn es ein besseres Design ist.Golang zu Json, Erstellen von Google Charts

Hier ist ein Beispiel, was der JSON enthalten würde, wenn es zwei Aufrufe wären.

cols = '[{ "label": "M-te", "Typ": "string"}, { "label": "Tage", "type": "Nummer"}]' rows = '[ [ "Jan", 31], [ "Februar", 28], [ "Mar", 31]] '

Und wenn es eine

data =' [[ "Monat", "Tage" ], [ "Jan", 31], [ "Februar", 28], [ "Mar", 31]]‘

das kann ich https://mholt.github.io/json-to-go/ die JSON in eine umzuwandeln bei https://elements.polymer-project.org/elements/google-chart

finden Struktur.

Angenommen, zwei Anrufe, Ich habe dieses ..

type Chart struct { 
     Cols []struct { 
      Label string `json:"label"` 
      Type string `json:"type"` 
     } `json:"cols"` 
     Rows []struct { 
      Num0 string `json:"0"` 
      Num1 int `json:"1"` 

Alle Hilfe und Rat würden die meisten geschätzt werden.

Prost.

EDIT ..

func (c *ChillController) Get() { 

jsonString := "[[\"Month\", \"Days\"], [\"Jan\", 31], [\"Feb\", 28], [\"Mar\", 31]]" 
d := [][]Chart{} 

json.Unmarshal([]byte(jsonString), &d) 

fmt.Printf("%v", &d) 

c.Data["json"] = &d 
c.ServeJSON() 

}

Und es zurück ..

[ [ null, null ], [ null, null ] ]

Was habe ich verpasst.

Antwort

1

ich immer verwenden json-to-go einer meiner Favoriten-Tool ist, aber ich habe einen Fehler gefunden https://github.com/mholt/json-to-go/issues/18

Ihre Struktur sollte wie folgt aussieht: type Chart [][]interface{} mit anderen Worten ein Stück Scheiben. Sehen Sie diese Frage zu Unmarshall nested JSON Arrays in Go/Golang

Edit:

Speziellere Ihre Reihen ist ein Stück Scheiben Strings und Zahlen, so traurig müssen wir etwas ähnliches verwenden, was ich schrieb Ihnen: [][]interface{} weil eine Scheibe muss den gleichen Typ haben und in diesem Fall haben wir Strings und Zahlen, so dass die Lösung die leere Schnittstelle {} ist. Versuchen Sie auch immer, Ticks `` zu verwenden, um rohe Json in Go zu repräsentieren, es sieht besser aus und Sie müssen keine Anführungszeichen fliehen.

jsonString := `[ 
    ["Month", "Days"], ["Jan", 31], ["Feb", 28], ["Mar", 31] 
]` 

var rows [][]interface{} 

err := json.Unmarshal([]byte(jsonString), &rows) 

if err != nil { 
    fmt.Println("error:", err) 
    return 
} 

fmt.Printf("%+v \n\n", rows) 

for _, row := range rows { // each row in this example is just one 

    if len(row) < 2 { 
     fmt.Println("unexpected row len") 
     continue // or return error 
    } 

    // we can access to [0] or [1] 

    month := row[0].(string) // column 1 
    day := row[1]   // column 2 

    if dayNumber, isNumber := day.(float64); isNumber { // by default use the biggest type for numbers float64 
     fmt.Println("Month:", month, "Day number:", dayNumber) 
     continue 
    } 

    if dayStr, isString := day.(string); isString { 
     fmt.Println("Month:", month, "Day string:", dayStr) 
     continue 
    } 
} 

Voll Beispiel: https://play.golang.org/p/ZGtBRqP3Uj

+0

Dank. Ich verstehe das Konzept nicht so, wie es scheint. Ich habe versucht, diese Änderung umzusetzen. Siehe die obige Bearbeitung. Was vermisse ich. –

+0

Sie versuchen ein Segment in eine Chart-Struktur zu unmarshalen, ein kleiner Trick: Wenn Sie '{}' in der JSON-Datei sehen, verwenden Sie Strukturen von Maps und '[]' für Slices. Ich habe meine Antwort auch bearbeitet :) –