将 Go 结构转换为 JSON

新手上路,请多包涵

我正在尝试使用 json 包将 Go 结构转换为 JSON,但我得到的只是 {} 。我确信这是完全显而易见的事情,但我没有看到。

 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))
}

然后当我尝试运行它时,我得到了这个:

 $ 6g test.go && 6l -o test test.6 && ./test
{}

原文由 magiconair 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 697
2 个回答

您需要 导出 User.name 字段,以便 json 包可以看到它。将 name 字段重命名为 Name

 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))
}

输出:

 {"Name":"Frank"}

原文由 peterSO 发布,翻译遵循 CC BY-SA 3.0 许可协议

相关问题:

我在将 struct 转换为 JSON,将其作为 Golang 的响应发送,然后通过 Ajax 在 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 中:

 // web call & receive in "data", thru Ajax/ other

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

原文由 Manohar Reddy Poreddy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题