2016-10-22 3 views
0

私はPolymer Google Chartsを使用しています。私は1つのController.ServeJSON呼び出しでJSONを作成したいが、それが優れた設計であれば2つのJSONを作成したい。Golang to Json、Google Chartsを作成する

JSONが2回コールする場合のJSONの例を示します。

cols = '[{"label": "Mth"、 "type": "string"}、{"label": "Days"、 "type": "number"}]' rows = '[ [ "月"、31]、[ "2月"、28]、[ "月"、31]] '

そして、それは= 1つの

データであるかの' [[ "月"、 "日" ]、[ "月"、31]、[ "2月"、28]、[ "月"、31]]」

これはhttps://elements.polymer-project.org/elements/google-chart

で発見することができますが、私はにJSONを変換するhttps://mholt.github.io/json-to-go/を使用構造体。二コールと仮定すると

は、この..

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

すべての助けを得て、アドバイスを最も高く評価されるだろう。

乾杯。

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

}

そして、それは返さ..

[ [ NULL、NULL ]、 [ NULL、NULL ] ]

私は何を欠席しましたか?

答えて

1

私は常にJSON-to-Goのを使用して、私のお気に入りのツールの一つですが、私はあなたの構造体がどのように見えるべきでバグにhttps://github.com/mholt/json-to-go/issues/18

が見つかりました:他の言葉でtype Chart [][]interface{}スライスのスライス。スライスため[][]interface{}:あなたのは、文字列と数値のスライスのスライスなので、悲しいことに私たちは、私はあなたを書いたものと同様のものを使用する必要が

、より具体的に:あまりにもUnmarshall nested JSON Arrays in Go/Golang

編集この質問を参照してください。同じ型を持たなければならず、この場合、文字列と数字があるので、解は空のinterface {}になります。また、常に、生の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

jsonの '{}'がマップの構造体を使用し、スライスのために '[]'が使用されていると、Chart構造体にスライスを非マーシャルしています。私も私の答えを編集:) –