使用Golang解析具有另一个结构体列表的结构体。

huangapple go评论73阅读模式
英文:

Golang unmarshal struct with list of another struct

问题

我正在使用Go语言,尝试将JSON解组为一个包含另一个结构体列表的结构体。有些地方出了问题,它无法解组,我无法找出原因。还有其他需要做的事情吗?

package main

import (
	"encoding/json"
	"fmt"
)

type FullMessage struct {
	SubMessages []SubMessage `json:"sub_messages"`
}

type SubMessage struct {
	Value string `json:"value"`
}

func main() {
	responseBytes := []byte(`{ "sub_messages":  [ {"value": "testing" } ] }`)
	myMessage := FullMessage{}
	unmarshalErr := json.Unmarshal(responseBytes, &myMessage)
	fmt.Println(unmarshalErr)
	fmt.Println(myMessage) // 应该有值,但是没有
	fmt.Println(len(myMessage.SubMessages)) // 应该是1,但是是0
}

请注意,我已经对代码进行了一些修正:

  • FullMessage结构体的json标签中,将sub_messages改为"sub_messages",以确保正确解组。
  • SubMessage结构体的json标签中,将value改为"value",以确保正确解组。
  • 将JSON字符串中的双引号改为反引号,以避免转义字符的问题。

这些更改应该能够解决你遇到的问题。

英文:

I am using Go and trying to unmarshal JSON to a struct which contains a list of another struct. Something is wrong where it doesn't unmarshal it and I cannot figure out why. Is there something else you are supposed to do?

package main

import (
	"encoding/json"
	"fmt"
)

type FullMessage struct {
	SubMessages []SubMessage `json:sub_messages`
}

type SubMessage struct {
	Value string `json:value`
}

func main() {
	responseBytes := []byte("{  \"sub_messages\":  [ {\"value\": \"testing\"  } ] }")
	myMessage := FullMessage{}
	unmarshalErr := json.Unmarshal(responseBytes, &myMessage)
	fmt.Println(unmarshalErr)
	fmt.Println(myMessage) // should be populated, but it isn't
	fmt.Println(len(myMessage.SubMessages)) // should be 1, is 0
}

答案1

得分: 1

你需要在结构标签中添加引号,如下所示:

type FullMessage struct {
    SubMessages []SubMessage `json:"sub_messages"`
}

type SubMessage struct {
    Value string `json:"value"`
}
英文:

You need to add quotes in the struct tag as follows:

type FullMessage struct {
    SubMessages []SubMessage `json:"sub_messages"`
}

type SubMessage struct {
    Value string `json:"value"`
}

huangapple
  • 本文由 发表于 2022年4月28日 05:27:25
  • 转载请务必保留本文链接:https://go.coder-hub.com/72035485.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定