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

json.Unmarshal返回空白结构

满自明
2023-03-14
问题内容

我有一个看起来像这样的JSON Blob

{
    "metadata":{
        "id":"2377f625-619b-4e20-90af-9a6cbfb80040",
        "from":"2014-12-30T07:23:42.000Z",
        "to":"2015-01-14T05:11:51.000Z",
        "entryCount":801,
        "size":821472,
        "deprecated":false
    },
    "status":[{
         "node_id":"de713614-be3d-4c39-a3f8-1154957e46a6",
         "status":"PUBLISHED"
    }]
}

我有一些代码将其转换回go结构

type Status struct {
    status string
    node_id string
}

type Meta struct {
    to string
    from string
    id string
    entryCount int64
    size int64
    depricated bool
}

type Mydata struct {
    met meta
    stat []status
}

var realdata Mydata
err1 := json.Unmarshal(data, &realdata)
if err1 != nil {
    fmt.Println("error:", err1)
}
fmt.Printf("%T: %+v\n", realdata, realdata)

但是我在运行时看到的只是一个零位结构

main.Mydata: {met:{to: from: id: entryCount:0 size:0 depricated:false} stat:[]}

我尝试先分配该结构,但那也没有用,我不确定为什么它不产生值,并且不返回错误


问题答案:

您的结构字段不会导出。这是因为它们以小写字母开头。

EntryCount // <--- Exported
entryCount // <--- Not exported

当我说“未导出”时,是指它们在您的包装之外不可见。您的软件包可以愉快地访问它们,因为它们在本地作用域内。

至于encoding/json包装-它看不到它们。您需要通过使所有字段encoding/json都以大写字母开头,从而使它们对包可见,从而导出它们:

type Status struct {
    Status  string
    Node_id string
}

type Meta struct {
    To         string
    From       string
    Id         string
    EntryCount int64
    Size       int64
    Depricated bool
}

type Mydata struct {
    Metadata  Meta
    Status []Status
}

[See it working on the Go Playground here](http://play.golang.org/p/adZgg_x4j3)

您还应该参考Golang规范以获得答案。具体来说,是有关导出的标识符的部分。



 类似资料:
  • 我正在构建我的第一个Spring Boot应用程序。但是我不能正确地得到我的requestMapping控制器的回答。 这是我的主要课程: 这是我的RestController: 如果我看一下日志,我可以看到“/hi”映射: 但是当我访问:http:localhost:8080/hi时,我看到了一个空白页面,我期望看到“Hello World”文本。 为什么我得到一个空白页面? ---编辑----

  • 我正在使用JOOQ和Postgres。在博士后中,我有一个专栏性别: (表本身是一个视图,性别列是用Java计算的值的占位符) 在Java中,当I.fetch()视图时,我会对每条记录进行一些计算: 所有看起来都很好,如果打印值,它们都是正确的。但是,当我在我的技能记录上调用intoResultSet()时,性别列在所有值旁边都有一个星号,例如“*男性”。 然后,我使用结果集作为OpenCSV C

  • 问题内容: 我想上传图像文件,将它们绘制到画布中,进行更改并将其保存在数据库中。我尝试测试画布图像()返回的base64值,该值为空白。但是,当我将canvas()附加到文档时,会看到结果。我在这里做错了什么? 问题答案: 我的直觉说,所有内容都应纳入功能中。 这意味着,在相关部分,代码变为: 原因是行 加载图像后正确执行。但不幸的是,执行此行时,您不必等待加载: 和所有后续行。 需要加载图像才能

  • 我对REST编程很陌生。 下面是我的类,它打算返回XML/JSON,但我很难让它返回正确的值。我尝试返回我的POJO类的Response、JsonArray和Object,但没有成功。我看了好几条线索,但都搞不清到底是什么问题。 资源类: POJO类: 这是我返回响应或朋友对象时得到的: 当返回< code>JsonArray时,我得到的是: 我面临的另一个问题是:如果我创建一个构造函数,我得到以

  • 问题内容: 我正在使用glfx.js编辑我的图像,但是当我尝试使用函数获取该图像的数据时,我得到了一个空白图像(宽度与原始图像相同)。 奇怪的是,在Chrome中,脚本可以完美运行。 我要提及的是,使用onload事件加载了图像: 另外,我的图片路径在同一域中; 问题(在Firefox中)是当我按下“保存”按钮时。Chrome返回预期结果,但Firefox返回以下结果: 是什么导致此结果,如何解决

  • 问题内容: 看到这个游乐场:http : //play.golang.org/p/dWku6SPqj5 基本上,我正在使用的库将a作为参数接收,然后需要从字节数组中获取。在幕后,该参数是一个与字节数组的json结构匹配的结构,但该库没有对该结构的引用(但它确实具有对相应的reflect.Type through的引用)。 为什么json包无法检测基础类型?由于某种原因,它会返回一个简单的映射,而不