我正在尝试查看是否有一种方法(简便方法)使用encoding/json
和GO向JSON中的每个数组添加标头。
我的意思是什么?
想要这样的东西:
{
"Dog":[
{
"breed":"Chihuahua",
"color":"brown"
},
{
"breed":"Pug",
"color":"white"
}
],
"Cat":[
{
"breed":"British",
"color":"white"
},
"breed":"Ragdoll",
"color":"gray"
}
]
}
主要思想是在这种情况下Dog
和Cat
有一个“类别”。
我已经有了这个解决方案,但我正在寻找可以改善这一点的东西。
我的代码如下:
type Dog struct {
Breed string
Color string
}
type Cat struct {
Breed string
Color string
}
func main(){
dogs := [...]Dog{
{"Chihuahua", "brown"},
{"Pug", "white"},
}
cats := [...]Cat{
{"British", "white"},
{"Ragdoll", "gray"},
}
c, err := json.MarshalIndent(cats, "", "\t")
if err != nil {
log.Fatal(err)
}
d, err := json.MarshalIndent(dogs, "", "\t")
if err != nil {
log.Fatal(err)
}
fmt.Println("{")
fmt.Printf(" \"Dog\": %v,\n", string(d))
fmt.Printf(" \"Cat\": %v\n}", string(c))
}
主要思想是将“ Dog”和“ Cat”作为新数组,但是我想改进代码以使“ hardcoded”看起来不像预期的那样,我想知道是否存在添加标题“ Dog”和所有数组值的简单方法,添加标题“ Cat”和所有数组值。
答案 0 :(得分:1)
无需为狗和猫分别创建json对象。封送数据时,这将导致单独的json对象。
您尝试的方法基本上是适当且无用的。
方法应创建一个结果结构,该结构将把dogs和cats结构作为字段,并将其类型分别作为两者的切片。举个例子:
package main
import (
"fmt"
"encoding/json"
"log"
)
type Result struct{
Dog []Dog
Cat []Cat
}
type Dog struct{
Breed string
Color string
}
type Cat struct {
Breed string
Color string
}
func main(){
dogs := []Dog{
{"Chihuahua", "brown"},
{"Pug", "white"},
}
cats := []Cat{
{"British", "white"},
{"Ragdoll", "gray"},
}
result := Result{
Dog: dogs,
Cat: cats,
}
output, err := json.MarshalIndent(result, "", "\t")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(output))
}
输出:
{
"Dog": [
{
"Breed": "Chihuahua",
"Color": "brown"
},
{
"Breed": "Pug",
"Color": "white"
}
],
"Cat": [
{
"Breed": "British",
"Color": "white"
},
{
"Breed": "Ragdoll",
"Color": "gray"
}
]
}
Go playground上的工作代码