2016-10-22 124 views
0

我正在使用Polymer Google Charts。我想爲一個Controller.ServeJSON調用創建JSON,但如果它是更好的設計,則需要兩個。Golang to Json,創建Google Charts

這是一個JSON包含的例子,如果是兩次調用。 ' rows ='[{「label」:「Mth」,「type」 [ 「揚」,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"` 

所有幫助和建議將最讚賞。

乾杯。

編輯..

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對圍棋是我最喜歡的工具之一,但我發現了一個bug https://github.com/mholt/json-to-go/issues/18

你應該結構是這樣的:換句話說type Chart [][]interface{}片的切片。看到這個問題太Unmarshall nested JSON Arrays in Go/Golang

編輯:

更具體的是字符串和數字切片片,所以遺憾的是,我們必須使用類似的東西我寫給你的:[][]interface{}因爲片必須具有相同的類型,在這種情況下,我們有字符串和數字,因此解決方案爲空接口{}。也總是嘗試使用ticks``來代表原始Json,它看起來更好,而且不必逃避引號。

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

您正試圖將一個切片解組爲一個Chart結構,一個小技巧:如果您在json中看到「{}」,請使用地圖結構,並使用[]切片。我編輯了我的答案:) –