首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Go结构转换为JSON

将Go结构转换为JSON
EN

Stack Overflow用户
提问于 2011-11-25 22:54:58
回答 4查看 294.4K关注 0票数 238

我正在尝试使用json包将Go结构转换为{},但得到的结果都是JSON。我确信这是很明显的事情,但我看不出来。

代码语言:javascript
复制
package main

import (
    "fmt"
    "encoding/json"
)

type User struct {
    name string
}

func main() {
    user := &User{name:"Frank"}
    b, err := json.Marshal(user)
    if err != nil {
        fmt.Printf("Error: %s", err)
        return;
    }
    fmt.Println(string(b))
}

然后,当我尝试运行它时,我得到了这样的结果:

代码语言:javascript
复制
$ 6g test.go && 6l -o test test.6 && ./test 
{}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-25 23:27:03

您需要对User.name字段执行export操作,以便json包可以看到它。将name字段重命名为Name

代码语言:javascript
复制
package main

import (
    "fmt"
    "encoding/json"
)

type User struct {
    Name string
}

func main() {
    user := &User{Name: "Frank"}
    b, err := json.Marshal(user)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}

输出:

代码语言:javascript
复制
{"Name":"Frank"}
票数 415
EN

Stack Overflow用户

发布于 2015-07-30 23:12:44

相关问题:

我在将struct转换为JSON时遇到了麻烦,从Golang将其作为响应发送,然后,后来通过Ajax在JavaScript中捕获了同样的内容。

浪费了很多时间,所以在这里发布解决方案。

在Go中:

代码语言:javascript
复制
// web server

type Foo struct {
    Number int    `json:"number"`
    Title  string `json:"title"`
}

foo_marshalled, err := json.Marshal(Foo{Number: 1, Title: "test"})
fmt.Fprint(w, string(foo_marshalled)) // write response to ResponseWriter (w)

在JavaScript中:

代码语言:javascript
复制
// web call & receive in "data", thru Ajax/ other

var Foo = JSON.parse(data);
console.log("number: " + Foo.number);
console.log("title: " + Foo.title);
票数 78
EN

Stack Overflow用户

发布于 2019-07-01 19:59:34

您可以定义自己的自定义MarshalJSON和UnmarshalJSON方法,并有意控制应包含的内容,例如:

代码语言:javascript
复制
package main

import (
    "fmt"
    "encoding/json"
)

type User struct {
    name string
}

func (u *User) MarshalJSON() ([]byte, error) {
    return json.Marshal(&struct {
        Name     string `json:"name"`
    }{
        Name:     "customized" + u.name,
    })
}

func main() {
    user := &User{name: "Frank"}
    b, err := json.Marshal(user)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(b))
}
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8270816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档