2016-02-23 72 views
1

從JSON字符串解碼地圖切片繼Go by Example: JSON tutorial,我看到如何使用基本的JSON字符串工作:在Golang

package main 

import (
    "encoding/json" 
    "fmt" 
    ) 

type Response struct { 
    Page int  `json:"page"` 
    Fruits []string `json:"fruits"` 
} 

func main() { 
    str := `{"page": 1, "fruits": ["apple", "peach"]}` 
    res := Response{} 
    json.Unmarshal([]byte(str), &res) 
    fmt.Println(res.Page) 
    fmt.Println(res.Fruits) 
} 

// the output looks good here: 
// 1 
// [apple peach] 

我想一些複雜性添加到str數據對象,我正在解碼。

也就是說,我想補充的一個關鍵與地圖作爲其值的一部分:

"activities": [{"name": "running"}, {"name", "swimming"}] 

我的劇本,現在看起來像下面的例子,但是,對於我的生活,我想不出爲了得到activities中的值,Response結構中正確的語法是什麼。我知道這個語法是不正確的:Activities []string ...,但不能破解我捕捉我想要顯示的數據的解決方案。

package main 

import (
    "encoding/json" 
    "fmt" 
    ) 

type Response struct { 
    Page int  `json:"page"` 
    Fruits []string `json:"fruits"` 
    Activities []string `json:"activities"` 
} 

func main() { 
    str := `{"page": 1, "fruits": ["apple", "peach"], "activities": [{"name": "running"}, {"name", "swimming"}]}` 
    res := Response{} 
    json.Unmarshal([]byte(str), &res) 
    fmt.Println(res.Page) 
    fmt.Println(res.Fruits) 
    fmt.Println(res.Activities) 
} 

// the script basically craps out here and returns: 
// 0 
// [] 
// [] 

感謝您的幫助!

回答

4

使用[]地圖[字符串]字符串:

type Response struct { 
    Page int  `json:"page"` 
    Fruits []string `json:"fruits"` 
    Activities []map[string]string `json:"activities"` 
} 

playground example

經常檢查和處理錯誤。 示例JSON具有在遊樂場示例中更正的語法錯誤。

+0

作品完美!謝謝! – SeanPlusPlus

0

我知道這是一個古老的一個,但我最近寫的實用程序,用於生成精確的JSON輸入走類型和類似的情況下,你可以給它一個旋轉:https://github.com/m-zajac/json2go

對於它從產生這個特殊的例子JSON:

{"page": 1, "fruits": ["apple", "peach"], "activities": [{"name": "running"}, {"name": "swimming"}]} 

走類型:

type Object struct { 
    Activities []struct { 
     Name string `json:"name"` 
    } `json:"activities"` 
    Fruits []string `json:"fruits"` 
    Page int  `json:"page"` 
}