答案 0 :(得分:0)
小细节:您正在引用两次:您将对象地址的地址提供给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)
}