ホームページ  >  記事  >  バックエンド開発  >  Go で非標準の JSON 時刻形式をカスタム アンマーシャリングする方法

Go で非標準の JSON 時刻形式をカスタム アンマーシャリングする方法

DDD
DDDオリジナル
2024-11-16 14:48:02393ブラウズ

How to Custom Unmarshal Non-Standard JSON Time Formats in Go?

非標準の JSON 時間形式のカスタムアン/マーシャリング

非標準形式の時間値を含む JSON データを扱う場合、組み込みの JSON デコーダでエラーが発生する可能性があります。このような状況に対処するために、カスタムのマーシャル関数とアンマーシャル関数を実装できます。

次の JSON を考えてみましょう:

{
    "name": "John",
    "birth_date": "1996-10-07"
}

そして、目的の Go 構造体:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}

使用標準の JSON デコーダでは、「birth_date」フィールドの解析中にエラーが発生します。この動作をカスタマイズするには、型エイリアスを作成して構造体に追加します。

type JsonBirthDate time.Time

次に、カスタム マーシャル関数とアンマーシャル関数が実装されます。

func (j *JsonBirthDate) UnmarshalJSON(b []byte) error {
    s := strings.Trim(string(b), `"`) // Remove quotes
    t, err := time.Parse("2006-01-02", s)
    if err != nil {
        return err
    }
    *j = JsonBirthDate(t)
    return nil
}

func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

これらのカスタム関数を使用して、これで、JSON を意図したとおりに Go 構造体にデコードできるようになりました:

person := Person{}

decoder := json.NewDecoder(req.Body);

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}

// Print the birth date using the Format function
fmt.Println(person.BirthDate.Format("2006-01-02"))

以上がGo で非標準の JSON 時刻形式をカスタム アンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。