ホームページ  >  記事  >  バックエンド開発  >  Golang で JSON から非標準時間形式を解析するにはどうすればよいですか?

Golang で JSON から非標準時間形式を解析するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-09 03:23:01868ブラウズ

How to Parse Non-Standard Time Formats from JSON in Golang?

JSON からの非標準時間形式の解析

JSON データをカスタム構造にデコードするときに、日付形式の不一致が発生する可能性があります。これに対処するために、Golang はカスタム マーシャラ関数およびアンマーシャラ関数を実装するオプションを提供します。

カスタム マーシャラ関数およびアンマーシャラ関数

カスタム解析形式を指定するには、型エイリアスを使用します。

type JsonBirthDate time.Time

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

// MarshalJSON converts a time value to a JSON string.
func (j JsonBirthDate) MarshalJSON() ([]byte, error) {
    return json.Marshal(time.Time(j))
}

このカスタム ロジックは、JSON 値が目的の形式であるかどうかを確認し、それに応じて解析します。

更新された構造と解析

カスタム型を使用するように構造体が更新され、デコードは通常どおり続行できます:

type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}

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

追加機能

便宜上、フォーマットされた日付表現を提供するために Format メソッドを追加できます。

// Format prints the date using the specified format string.
func (j JsonBirthDate) Format(s string) string {
    t := time.Time(j)
    return t.Format(s)
}

このカスタム マーシャリングおよびアンマーシャリングのアプローチにより、次のような場合でも JSON からの時間値を柔軟に解析できます。標準形式から逸脱しています。

以上がGolang で JSON から非標準時間形式を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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