如何将标头添加到JSON以标识数组值的数组名称

时间:2018-10-15 16:59:22

标签: json go encoding

我正在尝试查看是否有一种方法(简便方法)使用encoding/json和GO向JSON中的每个数组添加标头。

我的意思是什么?

想要这样的东西:

{
     "Dog":[
      {
           "breed":"Chihuahua",
           "color":"brown"
      },
      {
           "breed":"Pug",
           "color":"white"
      }
    ],
     "Cat":[
     {
           "breed":"British",
           "color":"white"
     },
           "breed":"Ragdoll",
           "color":"gray"
     }
    ]
}

主要思想是在这种情况下DogCat有一个“类别”。

我已经有了这个解决方案,但我正在寻找可以改善这一点的东西。

我的代码如下:

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”和所有数组值。

1 个答案:

答案 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上的工作代码