我想创建一个输出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 创建输出,因为我们正在使用struct值创建JSON。
我尝试探索在
map[string]string
中使用map[string]interface{}
和Person struct
的各种选项。但这是行不通的。根据问题开头显示的要求,是否有更好的实现可用于获取JSON输出。
先谢谢您的帮助。我最近开始在golang进行开发。
运行源在这里可用:https://play.golang.org/p/eIxDyWXfZ1C
最佳答案
也许你这样想
type Person struct {
Name, City string
Contact []ContactStruct
}
type ContactStruct struct {
Key string
Value string
}
func main() {
StreetData := ContactStruct{Key: "StreetName", Value: "ABC Street"}
PostalCodeData := ContactStruct{Key: "PostalCode", 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))
}
关于json - 使用struct使用key:value作为标记名称创建JSON输出时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61078520/