[json] 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에서 동일하게 catch하는 데 문제가있었습니다.
많은 시간을 낭비 했으므로 여기에 솔루션을 게시하십시오.
이동 중 :
// 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)
자바 스크립트에서 :
// 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”옵션을 지정합니다.
빈 값은 false, 0, nil 포인터 또는 인터페이스 값, 길이가 0 인 배열, 슬라이스, 맵 또는 문자열입니다. 객체의 기본 키 문자열은 구조체 필드 이름이지만 구조체 필드의 태그 값으로 지정할 수 있습니다. struct 필드의 태그 값에있는 “json”키는 키 이름이며 쉼표와 옵션 (옵션)이 뒤에옵니다.
답변
사용자 정의 MarshalJSON 및 UnmarshalJSON 메소드를 정의하고 포함해야 할 내용을 의도적으로 제어 할 수 있습니다 (예 :
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))
}