map[key:2073933158088]
我需要从这个数据结构中获取密钥作为字符串,但我似乎无法弄清楚如何!
非常感谢这个过于简单的问题。
上面的值封装在名为data。的变量中。
我尝试过:data.key
,data[key]
,data["key"]
,data[0]
,这些似乎都不合适。
要定义数据,我将一个JSON数据包发送到IronMQ上的队列。然后我从队列中拉出消息并按照这样操作:
payloadIndex := 0
for index, arg := range(os.Args) {
if arg == "-payload" {
payloadIndex = index + 1
}
}
if payloadIndex >= len(os.Args) {
panic("No payload value.")
}
payload := os.Args[payloadIndex]
var data interface{}
raw, err := ioutil.ReadFile(payload)
if err != nil {
panic(err.Error())
}
err = json.Unmarshal(raw, &data)
答案 0 :(得分:2)
设计数据类型以匹配json结构。这是如何实现这一目标的:
package main
import (
"fmt"
"encoding/json"
)
type Data struct {
Key string `json:"key"`
}
func main() {
data := new(Data)
text := `{ "key": "2073933158088" }`
raw := []byte(text)
err := json.Unmarshal(raw, data)
if err != nil {
panic(err.Error())
}
fmt.Println(data.Key)
}
答案 1 :(得分:2)
由于json中的数字是不加引号的,它不是一个字符串,如果你试图将它作为一个字符串处理,Go会发生恐慌(playground:http://play.golang.org/p/i-NUwchJc1)。
这是一个可行的替代方案:
package main
import (
"fmt"
"encoding/json"
"strconv"
)
type Data struct {
Key string `json:"key"`
}
func (d *Data) UnmarshalJSON(content []byte) error {
var m map[string]interface{}
err := json.Unmarshal(content, &m)
if err != nil {
return err
}
d.Key = strconv.FormatFloat(m["key"].(float64), 'f', -1, 64)
return nil
}
func main() {
data := new(Data)
text := `{"key":2073933158088}`
raw := []byte(text)
err := json.Unmarshal(raw, data)
if err != nil {
panic(err.Error())
}
fmt.Println(data.Key)
}
您可以在操场上看到结果:http://play.golang.org/p/5hU3hdV3kK