【问题标题】:Golang Json Not returning expected valuesGolang Json没有返回预期值
【发布时间】:2014-06-25 00:55:11
【问题描述】:

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

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

谢谢。

【问题讨论】:

  • 当你写u.Details[Phone:"1111"].Email时你打算做什么?这不是有效的 go 语法。
  • 我从下面的回复中得到了答案。这就是我的本意。谢谢咯。

标签: go


【解决方案1】:

小细节:你引用了两次:你把对象的地址给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)
}

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 2020-06-30
    • 2018-08-17
    相关资源
    最近更新 更多