【问题标题】:golang struct for unmarshal用于解组的 golang 结构
【发布时间】:2015-12-02 05:38:13
【问题描述】:

我需要创建一个结构来解组和访问键“name”并接收它的值。

{
    "product":"car",
    "spec":[
        {
            "name":"bla_bla",
            "info":{
                "color":"black",
                "year":1991
            }
        }
    ]
} 

这是我的结构现在的样子:

type Products struct {
Product string `json:"product"`
Specs []Spec  `json:"spec"`
}

type Spec struct {
    Name string  `json:"name"`
    Info Inf `json:"info"`
}

type Inf struct {
    Color string `json:"color"`
    Year  int  `json:"year"`
}

使用这个结构我只能访问Products.ProductProducts.Specs 只显示[ ]

我检查了来自 websocket 的 json.unmarshal 错误和原始响应,我发现我的 json 字符串看起来有点不同。

 c :=  `{"product":"car","spec":["{\"name\":\"bla_bla\",\"info\":{\"color\":\"black\",\"year\":\"1991\"}}"]}`

我用字符串替换了一些字符和解码器。现在它可以按照我想要的方式工作了。

s_replacer := strings.NewReplacer(`"{`, "{", `"]`, "]", "\\", "")
z := s_replacer.Replace(c)
dec := json.NewDecoder(strings.NewReader(z))

for {
    var m Products
    if err := dec.Decode(&m); err == io.EOF {
        break
    } else if err != nil {
        log.Fatal(err)
    }
    fmt.Println(m.Specs[0].Name)
}

我认为问题在于方括号中的引号将其视为字符串数组。无论如何,感谢您的回复,我对 golang 还是很陌生。

【问题讨论】:

标签: data-structures go


【解决方案1】:

您似乎已经找到了解决问题的方法,但您不需要解决它。

我不确定您使用什么语言来提供此 JSON 数据,但您正在将 Specs 转换为数组中的字符串。

例如,Javascript 中JSON.stringify({ "name": "test" }) 的返回值将是{"name":"test"}。但是,JSON.stringify('{ "name": "test" }') 将返回
"{ \\"name\\": \\"test\\" }"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2021-08-29
    • 1970-01-01
    • 2018-04-20
    相关资源
    最近更新 更多