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

无法将JSON解组到结构中

夹谷野
2023-03-14
问题内容

我想将以下JSON解组到结构中:

{"MAIN":{"data":[{"KEY1":"1111111","KEY2":"2222222","KEY3":0,"KEY4":"AAAAAAA","KEY5":"9999","KEY6":"4","KEY7":"BBBBBBB"}]}}

我试图以jsonStruct各种方式修改,但是结构始终为空:

package main

import (
    "encoding/json"
    "fmt"
)

type jsonStruct struct {
    main struct {
        data []struct {
            Key1 string `json:"KEY1"`
            Key2 string `json:"KEY2"`
            Key3 int    `json:"KEY3"`
            Key4 string `json:"KEY4"`
            Key5 string `json:"KEY5"`
            Key6 string `json:"KEY6"`
            Key7 string `json:"KEY7"`
       } `json:"data"`
    } `json:"MAIN"`
}

func main() {
    jsonData := []byte(`{"MAIN":{"data":[{"KEY1":"1111111","KEY2":"2222222","KEY3":0,"KEY4":"AAAAAAA","KEY5":"9999","KEY6":"4","KEY7":"BBBBBBB"}]}}`)

    var js jsonStruct

    err := json.Unmarshal(jsonData, &js)
    if err != nil {
            panic(err)
    }

    fmt.Println(js)
}

输出:

{{[]}}

过去使用的JSON没有括号,因此我怀疑问题与它们有关。

有人可以帮忙吗?

https://play.golang.org/p/pymKbOqcM-


问题答案:

发生这种情况是因为其他包(encoding/json)无法访问私有字段(即使具有反射)。在私有语言中,私有字段是以小写字母开头的字段。要解决此问题,请使您的结构包含公共字段(以大写字母开头):

type jsonStruct struct {
    Main struct {
        Data []struct {
            Key1 string `json:"KEY1"`
            Key2 string `json:"KEY2"`
            Key3 int    `json:"KEY3"`
            Key4 string `json:"KEY4"`
            Key5 string `json:"KEY5"`
            Key6 string `json:"KEY6"`
            Key7 string `json:"KEY7"`
       } `json:"data"`
    } `json:"MAIN"`
}

https://play.golang.org/p/lStXAvDtpZ



 类似资料:
  • 问题内容: 我有一项通过REST为我提供属性的服务。现在,我想将身体解组为属性结构。请查看此操场示例:单击。当我只有一个财产时,可以轻松将其编组为。但是,服务器发出的ACTUAL响应有所不同。我要解组的实际响应是这样的: 不幸的是,我不知道如何解组。有人可以指出正确的方向吗? 问题答案: 您需要解组一片属性:http : //play.golang.org/p/eRgjfBHypH

  • 问题内容: 我正在尝试解组以下YAML(使用gopkg.in/yaml.v2): 使用以下代码: 但这给了我以下错误: 顶级属性是动态的,因此我需要将它们解析为字符串,结构中的所有其他键将始终相同,因此这些部分的结构也是如此。我该如何解析? (完整代码位于https://github.com/tirithen/unit- conversion/blob/master/convert.go#L84

  • 问题内容: http://play.golang.org/p/f6ilWnWTjm 我正在尝试解码以下字符串,但仅获取空值。 如何在Go中解码嵌套的JSON结构? 我想将以下内容转换为地图数据结构。 问题答案: 在Go中使用嵌套结构来匹配JSON中的嵌套结构。 这是一个如何处理示例JSON的示例: 游乐场链接 您还可以对内部结构使用匿名类型: 游乐场链接 或外部和内部结构: 游乐场链接 如果您不知

  • 问题内容: 我想解组结构定义为: 使用似乎只对使用的,而忽略了场:https://play.golang.org/p/WUBfzpheMl 我有一个笨拙的解决方案,我可以手动设置该字段,但是我想知道是否有人可以使用一种更清洁或更简单的方法来进行设置。 谢谢! 问题答案: 发生这种情况是因为嵌入在中。这意味着当json库调用unmarshaler时,它最终以on调用了。 因此,在内部,参数包含整个j

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

  • 我关注了 json 根据给出的答案,我尝试了以下 我得到一个空数组,有如下错误。有什么建议吗? json:无法将数组解组为map[string]*json.RawMessage类型的Go值