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
{}
json
パッケージが表示できるように、 exportUser.name
フィールドが必要です。 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で同じものをキャッチするのに問題がありました。
多くの時間を無駄にしたため、ここにソリューションを投稿してください。
移動中:
// 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オブジェクトとしてエンコードします。次の場合を除き、エクスポートされた各構造体フィールドはオブジェクトのメンバーになります。
空の値は、false、0、nilポインターまたはインターフェイス値、および配列、スライス、マップ、または長さがゼロの文字列です。オブジェクトのデフォルトのキー文字列は構造体フィールド名ですが、構造体フィールドのタグ値で指定できます。構造体フィールドのタグ値の「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))
}