2016-10-22 121 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中看到“{}”,请使用地图结构,并使用[]切片。我编辑了我的答案:) –