将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 {} 

您需要导出 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"} 

相关问题:

我在将结构转换为JSON时遇到了困难,将它作为Golang的响应发送,然后通过Ajax在JavaScript中捕获相同的结果。

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

在Go:

 // 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); 

希望这有助于某人。
祝你好运。

结构值编码为JSON对象。 每个导出的结构字段成为对象的成员,除非:

  • 该字段的标签是“ – ”,或
  • 该字段为空,其标签指定“omitempty”选项。

空值是假的,0,任何零指针或接口值,和
任何数组,切片,映射或长度为零的string。 该对象的默认值
键string是结构字段名称,但可以在结构中指定
字段的标记值。 结构字段标记值中的“json”键是
键名称,后跟可选的逗号和选项。