将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”键是
键名称,后跟可选的逗号和选项。