1. ホーム
  2. json

[解決済み] json.Marshal(struct) は "{}" を返します。

2022-04-27 02:08:35

質問

type TestObject struct {
    kind string `json:"kind"`
    id   string `json:"id, omitempty"`
    name  string `json:"name"`
    email string `json:"email"`
}

func TestCreateSingleItemResponse(t *testing.T) {
    testObject := new(TestObject)
    testObject.kind = "TestObject"
    testObject.id = "f73h5jf8"
    testObject.name = "Yuri Gagarin"
    testObject.email = "[email protected]"

    fmt.Println(testObject)

    b, err := json.Marshal(testObject)

    if err != nil {
        fmt.Println(err)
    }

    fmt.Println(string(b[:]))
}

以下はその出力です。

[ `go test -test.run="^TestCreateSingleItemResponse$"` | done: 2.195666095s ]
    {TestObject f73h5jf8 Yuri Gagarin [email protected]}
    {}
    PASS

なぜJSONは本質的に空なのでしょうか?

解決するには?

必要なのは 輸出 のフィールドは、フィールド名の最初の文字を大文字にして、TestObjectのフィールドを作成します。変更 kindKind といった具合です。

type TestObject struct {
 Kind string `json:"kind"`
 Id   string `json:"id,omitempty"`
 Name  string `json:"name"`
 Email string `json:"email"`
}

encoding/json パッケージおよび類似のパッケージは、 unexported フィールドを無視します。

`json:"..."` フィールド宣言の後に続く文字列は 構造体タグ . この構造体のタグは、JSONとの間でマーシャリングする際に構造体のフィールドの名前を設定します。

遊び場でのルンルン気分 .