Как добавить заголовок в JSON для определения имени массива значений массива - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь посмотреть, есть ли способ (простой способ) добавить заголовок к каждому массиву в JSON, используя encoding/json с GO.

Что я имею в виду?

Хотитечтобы получить что-то вроде этого:

{
     "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" были в качестве нового массива, но я хочуулучшить мой код, чтобы он не был «жестко закодирован» так, чтобы он выглядел так, как должно быть, мне интересно, есть ли простой способ добавить заголовок «Dog» и все значения массива, добавить заголовок «Cat» и всезначения массива.

1 Ответ

0 голосов
/ 15 октября 2018

Нет необходимости создавать объекты json отдельно для собак и кошек.Это приведет к разделению объектов json при сортировке данных.

Подход, который вы пробуете, в основном уместен и бесполезен.

Подход должен создать структуру результата, которая будет иметь структуры собак и кошек.как поля с типом как срез обоих из них соответственно.Возьмем для примера:

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"
        }
    ]
}

Рабочий код на Перейти на игровую площадку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...