Golang Json未返回期望值

I have a code @ http://play.golang.org/p/HDlJJ54YqW

I wanted to print the Phone and email of a person. It can be of multiple entries. But getting the error undefined. Can anyone help out.

Thanks.

Small details: you are referencing twice: you give the address of the address of the object to json.Unmarshal. Just give the address.

` allows for multiline, no need to split your json input.

I don't know what you where trying to achieve with u.Details[Phone:"1111"].Email, but this is no Go syntax. your Details member is a slice off Detail. A slice is similar to an array and can be accessed by index.

Also, your json does not match your object structure. If you want to have multiple details in one content, then it needs to be embed in an array ([ ])

You could do something like this: (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
", u.SearchPhone("1111").Email)
    fmt.Printf("Phone: %s
", u.SearchEmail("@yahoo").Phone)
}