Golang Json没有返回预期值

时间:2014-06-24 16:17:44

标签: go

我有一个代码@ http://play.golang.org/p/HDlJJ54YqW

我想打印一个人的电话和电子邮件。 它可以是多个条目。 但是未定义错误。 任何人都可以帮忙。

感谢。

1 个答案:

答案 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)
}