当前位置: 首页 > 面试题库 >

即使提供匹配的数据结构也可以解组json错误

赖鸿羲
2023-03-14
问题内容

我开始使用Google Go语言,并且试图编写一个简单程序从Facebook的图API中获取Json对象并将其解组。

根据文档http://golang.org/doc/articles/json_and_go.html,我应该提供一个匹配的数据结构,例如json对象为:

{
    Name: "Alice"
    Body: "Hello",
    Time: 1294706395881547000,
}

数据结构将如下所示:

type Message struct {
    Name string
    Body string
    Time int64
}

就我而言,我的json看起来像这样:

{
  "id": "350685531728",
   "name": "Facebook for Android",
   "description": "Keep up with friends, wherever you are.",
   "category": "Utilities",
   "subcategory": "Communication",
   "link": "http://www.facebook.com/apps/application.php?id=350685531728",
   "namespace": "fbandroid",
   "icon_url": "http://static.ak.fbcdn.net/rsrc.php/v2/yo/r/OKB7Z2hkREe.png",
   "logo_url": "http://photos-b.ak.fbcdn.net/photos-ak-snc7/v43/207/227200684078827/app_115_227200684078827_474764570.png",
   "company": "Facebook"
}

因此,我提供了一个匹配的数据结构:

type Graph struct {
    id string
    name string
    description string
    category string
    subcategory string
    link string
    namespace string
    icon_url string
    logo_url string
    company string
}

这是代码:

package main

import "fmt"
import "net/http"
import "io/ioutil"
import "encoding/json"

type Graph struct {
    id string
    name string
    description string
    category string
    subcategory string
    link string
    namespace string
    icon_url string
    logo_url string
    company string
}

func main() {
    fmt.Println("Hello, playground")
    resp, err := http.Get("http://graph.facebook.com/android")

    if err != nil {
        fmt.Println("http.Get err: ",err)// handle error
    }

    defer resp.Body.Close()
    body, err := ioutil.ReadAll(resp.Body)

    fmt.Println("resp.Body: ", resp.Body)   
    fmt.Println("body: ",string(body))
    fmt.Println("err: ",err)

    var g Graph
    err = json.Unmarshal(body, &g)
    if err == nil {
        fmt.Println("graph: ", g)
    } else {
        fmt.Println("graph error: ",err) // <---error at this line
    }
}

但是我仍然收到以下错误:

graph error:  json: cannot unmarshal object key "id" into unexported field id of type main.Graph

任何想法?

谢谢!


问题答案:

该字段id
导出,因为它以小写字母开头。请参阅导出的标识符。



 类似资料:
  • 我在运行测试脚本后收到一个错误。我已经在其他测试脚本中运行了相同的方法,但我使用的这个脚本几乎与其他测试脚本相同。你能帮助我为什么会出现这个错误吗? 这是获取excel数据的方法。 这是我的数据提供程序方法

  • 问题内容: 是否可以在不对原始类型进行硬编码的情况下将JSON解组到由反射构成的结构中? 在此示例中,我使用了强制转换。但是,如果我不知道类型怎么办? 当我仅用于解组时,该结构将被清零。 当我省略演员表时,我会得到一张地图。这是可以理解的 问题答案: 这里的问题是,如果您在此处省略类型断言: 该推断有型。 然后,当您将地址解组时,类型为(指向interface {}的指针),并且解组无法按预期工作

  • 我试图张贴使用ajax在laravel 5.我得到CSRF令牌不匹配异常。我环顾四周,发现可能存在这样的问题,但在这种情况下,我确实包括了所有必要的代码。 请看一下我的代码。 看法 我已经在隐藏输入中提供了令牌,并将其包含在我的帖子中。 我有一个元在头如下。 下面是我的控制器。 这个只是测试用的,这里没什么。我的路线如下 请帮我解决这个问题 这是日志中的输出。 以下是我的浏览器控制台帖子标题和页面

  • 我有一个包含2列测试数据的xls文件。对于每一列,我都希望有一个测试方法。 现在我知道了如何使用dataprovider读取xls文件并将测试数据提供给一个测试方法。但如何使用同一个dataprovider进行多个测试呢? 我有下面的代码,一旦我运行这个代码得到错误,我的代码是: =========================================================默认

  • 问题内容: 我想在Go中解组以下JSON数据: 我知道该怎么做,我这样定义一个结构: 我不知道的是,是否有一种简单的方法可以对此进行专门化处理。我想在拆封后以如下格式获取数据: 这样我可以在像这样解组后稍后使用它: 我真的不知道如何在GO中轻松或习惯地执行此操作,因此我希望有一个不错的解决方案。 问题答案: 您可以通过在结构上实现接口来实现。这样的事情应该做: 这基本上表示应该从2个元素的floa

  • 问题内容: 我正在尝试解析一个包含JSON数据的文件: 由于这是带有动态键的JSON数组,因此我认为我可以使用: 但是,我无法使用来解析文件: 将包含JSON数据的文件解析为Go结构的最简单方法是将数组(仅字符串类型转换为字符串类型)? 编辑: 要进一步详细说明可接受的答案-的确,我的JSON是地图数组。为了使我的代码正常工作,该文件应包含: 然后可以将其读入 问题答案: 这是因为您的json实际