当前位置: 首页 > 面试题库 >

json.Marshal(struct)返回“ {}”

华烈
2023-03-14
问题内容
type TestObject struct {
    kind string `json:"kind"`
    id   string `json:"id, omitempty"`
    name  string `json:"name"`
    email string `json:"email"`
}

func TestCreateSingleItemResponse(t *testing.T) {
    testObject := new(TestObject)
    testObject.kind = "TestObject"
    testObject.id = "f73h5jf8"
    testObject.name = "Yuri Gagarin"
    testObject.email = "Yuri.Gagarin@Vostok.com"

    fmt.Println(testObject)

    b, err := json.Marshal(testObject)

    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(b[:]))
}

这是输出:

[ `go test -test.run="^TestCreateSingleItemResponse$"` | done: 2.195666095s ]
    {TestObject f73h5jf8 Yuri Gagarin Yuri.Gagarin@Vostok.com}
    {}
    PASS

为什么JSON本质上是空的?


问题答案:

您需要通过大写字段名称中的第一个字母来导出
TestObject中的字段。更改kindKind,依此类推。

type TestObject struct {
 Kind string `json:"kind"`
 Id   string `json:"id,omitempty"`
 Name  string `json:"name"`
 Email string `json:"email"`
}

encoding / json包和类似的包会忽略未导出的字段。

json:"..."字段声明之后的字符串是struct标签。在与JSON封送时,此struct中的标记设置该结构的字段名称。

[playground](https://play.golang.org/p/n19J5XhiGIL)



 类似资料:
  • 问题内容: 是否有可能做出无法逃脱和?我目前得到: 但我正在寻找这样的事情: 问题答案: 从Go 1.7开始,您仍然 无法使用json.Marshal()做到​​这一点 。json.Marshal的源代码显示: json.Marshal总是这样做的原因是: 字符串值编码为强制转换为有效UTF-8的JSON字符串,用Unicode替换符文替换无效字节。尖括号“ <”和“>”转义为“ \ u003c”

  • 问题内容: 我正在将Golang Revel用于某些Web项目,到目前为止,我确实喜欢12个项目。由于返回类型,在所有这些代码中我都有很多代码冗余。看一下这两个功能: 如您所见,它们都返回相同类型的数据(类型struct)。我的想法只是像这样传递字符串var: 像这样,我只能使用一个助手来返回数据类型,而不是一遍又一遍地对不同的模型但相同的数据类型执行同一操作。 我的问题是: 这有可能吗 如果是,

  • struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的实体。这个实体拥有属性:姓名和年龄。这样的类型我们称之struct。如下代码所示: type person struct { name string age int } 看到了吗?声明一个struct如此简单,上面的类型包

  • 此函数用于定义类型的结构对象,该结构对象由defstruct操作创建。 语法 (Syntax) 以下是语法。 (struct structname values) Parameters - 'structname'是要赋予结构的名称。 'values'是需要分配给结构的键值的值。 Return Value - 返回一个struct对象,其值映射到结构的键。 例子 (Example) 以下程序显示

  • 准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。 在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的str,你得配合位运算符这么写: >>> n = 10240099 >>> b1 = chr((n & 0

  • 准确地讲,Python没有专门处理字节的数据类型。但由于b'str'可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。 在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的bytes,你得配合位运算符这么写: >>> n = 10240099 >>> b1 = (n & 0xff