【发布时间】:2014-06-25 00:55:11
【问题描述】:
【问题讨论】:
-
当你写
u.Details[Phone:"1111"].Email时你打算做什么?这不是有效的 go 语法。 -
我从下面的回复中得到了答案。这就是我的本意。谢谢咯。
标签: go
【问题讨论】:
u.Details[Phone:"1111"].Email时你打算做什么?这不是有效的 go 语法。
标签: go
小细节:你引用了两次:你把对象的地址给json.Unmarshal。给个地址就好了。
` 允许多行,无需拆分您的 json 输入。
我不知道你想用u.Details[Phone:"1111"].Email 达到什么目的,但这不是 Go 语法。你的Details 成员是Detail 的一部分。切片类似于数组,可以通过索引访问。
另外,您的 json 与您的对象结构不匹配。如果您想在一个内容中包含多个详细信息,则需要将其嵌入到数组中([ ])
你可以这样做:(http://play.golang.org/p/OP1zbPW_wk)
package main
import (
"encoding/json"
"fmt"
)
type Content struct {
Owner string
Details []*Detail
}
type Detail struct {
Phone string
Email string
}
func (c *Content) SearchPhone(phone string) *Detail {
for _, elem := range c.Details {
if elem.Phone == phone {
return elem
}
}
return nil
}
func (c *Content) SearchEmail(email string) *Detail {
for _, elem := range c.Details {
if elem.Email == email {
return elem
}
}
return nil
}
func main() {
encoded := `{
"Owner": "abc",
"Details": [
{
"Phone": "1111",
"Email": "@gmail"
},
{
"Phone": "2222",
"Email": "@yahoo"
}
]
}`
// Decode the json object
u := &Content{}
if err := json.Unmarshal([]byte(encoded), u); err != nil {
panic(err)
}
// Print out Email and Phone
fmt.Printf("Email: %s\n", u.SearchPhone("1111").Email)
fmt.Printf("Phone: %s\n", u.SearchEmail("@yahoo").Phone)
}
【讨论】: