您实际上只需要一个结构,如注释中所述,在字段上的正确注释将产生所需的结果。JSON并不是一种非常多种多样的数据格式,它定义明确,并且任何json片段,无论它多么复杂和令人困惑,都可以很容易地在模式和Go和对象中以100%的精度表示。其他大多数OO编程语言。这是一个例子。
package mainimport ( "fmt" "encoding/json")type Data struct { Votes *Votes `json:"votes"` Count string `json:"count,omitempty"`}type Votes struct { OptionA string `json:"option_A"`}func main() { s := `{ "votes": { "option_A": "3" } }` data:= &Data{ Votes: &Votes{}, } err := json.Unmarshal([]byte(s), data) fmt.Println(err) fmt.Println(data.Votes) s2, _ := json.Marshal(data) fmt.Println(string(s2)) data.Count = "2" s3, _ := json.Marshal(data) fmt.Println(string(s3))}https://play.golang.org/p/ScuxESTW5i
根据您最近的评论,您可以通过使用
interface{}代表除计数之外的数据,使计数成为字符串并将其余的blob推入到,interface{}从而基本上可以接受任何内容,来解决这一问题。话虽这么说,Go是一种具有相当严格的类型系统的静态类型语言,但重申一下,您的声明“它可以是任何东西”是不正确的。JSON不能是任何东西。对于任何JSON片段,都有一个模式,一个模式可以定义JSON的许多变体。我建议您花一些时间来理解数据的结构,而不是将某些东西混在一起,因为它们是绝对无法定义的,并且对于知道自己正在做什么的人来说可能很容易。


