gpt4 book ai didi

json - 如何为 Go 结构创建 JSON

转载 作者:IT王子 更新时间:2023-10-29 01:24:48 25 4
gpt4 key购买 nike

我正在尝试使用 Marshal 函数从 Go 结构创建 JSON。创建的 JSON 不包含 Person 结构。
我错过了什么?

http://play.golang.org/p/ASVYwDM7Fz

type Person struct {
fn string
ln string
}
type ColorGroup struct {
ID int
Name string
Colors []string
P Person
}

per := Person{
fn: "John",
ln: "Doe",
}

group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
P: per,
}
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(b)

生成的输出如下:

{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"],"P":{}}

我在输出中没有看到 Person。
http://golang.org/pkg/encoding/json/#Marshal

最佳答案

你错过了两件事。

  1. 只有公共(public)字段可以编码为 json。
  2. 写入json 的名称是fieldd 的名称。在本例中,P 代表字段 Person。

请注意,我将字段名称更改为 Person 结构的大写字母,并且我添加了ColorGroup 结构上的 tag json 表示我希望该字段用另一个名称序列化。通常标记大部分字段并将名称更改为小写以与 javascript 的样式同步。

http://play.golang.org/p/HQQ8r8iV7l

package main

import (
"encoding/json"
"fmt"
"os"
)

func main() {
type Person struct {
Fn string
Ln string
}
type ColorGroup struct {
ID int
Name string
Colors []string
P Person `json:"Person"`
}

per := Person{Fn: "John",
Ln: "Doe",
}

group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
P: per,
}
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
os.Stdout.Write(b)
}

会输出

{"ID":1,"Name":"Reds","Colors":["Crimson","Red","Ruby","Maroon"],"Person":{"Fn":"John","Ln":"Doe"}}

关于json - 如何为 Go 结构创建 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24168259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com