Я хотел бы создать вывод JSON, как показано ниже,
{
"Name": "John Smith",
"City": "London",
"Contact": [
{ "key": "StreetName", "value": "SomeName" },
{ "key": "PostalCode", "value": "SomeValue" }
],
}
Я пытаюсь добиться этого, используя код ниже,
package main
import (
"encoding/json"
"fmt"
"log"
)
type Person struct {
Name, City string
Contact ContactStruct
}
type ContactStruct struct {
Street, PostalCode map[string]string
}
func main() {
StreetData := make(map[string]string)
StreetData["key"] = "StreetName"
StreetData["value"] = "ABC Street"
PostalCodeData := make(map[string]string)
PostalCodeData["key"] = "PostalCode"
PostalCodeData["value"] = "12345"
jsonData := Person{
Name: "John Smith",
City: "London",
Contact: ContactStruct{
StreetData,
PostalCodeData,
},
}
finalJsonData, err := json.MarshalIndent(jsonData, " ", " ")
if err != nil {
log.Fatal(err)
}
fmt.Println(string(finalJsonData))
}
Ниже приведен выходные данные генерируются с использованием приведенного выше кода,
{
"Name": "John Smith",
"City": "London",
"Contact": {
"Street": {
"key": "StreetName",
"value": "ABC Street"
},
"PostalCode": {
"key": "PostalCode",
"value": "12345"
}
}
}
Проблема: Как мы видим, выходные данные создаются с именами тегов "Street" и PostalCode , потому что мы создаем JSON с использованием значения struct.
Я пытался изучить различные варианты использования map[string]string
и map[string]interface{}
внутри Person struct
. Но это не работает.
Есть ли какая-нибудь лучшая реализация, чтобы получить вывод JSON, согласно моему требованию, показанному в начале вопроса.
Заранее спасибо за помощь , Я недавно начал разработку в golang.
Работающий источник доступен здесь: https://play.golang.org/p/eIxDyWXfZ1C