2016-10-22 5 views
0

Я использую Polymer Google Charts. Я хочу создать JSON для одного вызова Controller.ServeJSON, но два, если это лучший дизайн.Golang to Json, создавая Google Charts

Вот пример того, что будет включать JSON, если бы это был два вызова.

cols = '[{"label": "Mth", "type": "string"}, {"label": "Days", "type": "number"}]' rows = '[ [ "Ян", 31], [ "февраль", 28], [ "Март", 31]] '

И если это был один

данных =' [[ "месяц", "Дни" ], [ "Ян", 31], [ "февраль", 28], [ "Март", 31]]

Это можно найти на https://elements.polymer-project.org/elements/google-chart

Я использовал https://mholt.github.io/json-to-go/ для преобразования JSON в структура.

Предполагая двух вызовов, получил это ..

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"` 

Все помощь и советы были бы весьма признательны.

Cheers.

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

}

И он вернулся ..

[ [ нуля, нуля ], [ нуля, нуля ] ]

Что я пропустил.

ответ

1

Я всегда использую JSON-To-Go является одним из моих любимых инструментов, но я нашел ошибку https://github.com/mholt/json-to-go/issues/18

Ваша структура должна выглядеть так: type Chart [][]interface{} другими словами ломтик ломтиками. Смотрите этот вопрос слишком Unmarshall nested JSON Arrays in Go/Golang

Edit:

Более конкретные ваши строки является ломтик ломтиков строк и чисел, поэтому, к сожалению, мы должны использовать что-то подобное, что я писал вам: [][]interface{} потому что кусочек должен иметь тот же тип, и в этом случае мы имеем строки и числа, поэтому решение является пустым интерфейсом {}. Также всегда старайтесь использовать тики `` для представления raw Json in Go, это выглядит лучше, и вам не нужно скрывать кавычки.

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

Полный пример: https://play.golang.org/p/ZGtBRqP3Uj

+0

Спасибо. Я не полностью понимаю концепцию. Я попытался реализовать это изменение. См. Править выше. Что мне не хватает. –

+0

Вы пытаетесь развязать фрагмент в структуре диаграммы, небольшой трюк: если вы видите '{}' в json, используйте структуры карт и '[]' для фрагментов. Я тоже отредактировал свой ответ :) –