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

JSON から非標準時間形式をデコードするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-08 20:41:02
オリジナル
999 人が閲覧しました

How to Decode Non-Standard Time Formats from JSON?

JSON からの非標準時間形式のデコード

標準時間以外の形式を含む JSON データを扱う場合、標準 JSON デコードで問題が発生する可能性があります。特定の時刻形式パターンが想定されるため、問題が発生します。これを解決するには、カスタムのマーシャル関数とアンマーシャル関数を実装できます。

たとえば、次の JSON を考えてみましょう:

{
    "name": "John",
    "birth_date": "1996-10-07"
}
ログイン後にコピー

これを Person 構造体にデコードするとします:

type Person struct {
    Name string `json:"name"`
    BirthDate time.Time `json:"birth_date"`
}
ログイン後にコピー

標準の JSON の使用decoder:

person := Person{}

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

if err := decoder.Decode(&person); err != nil {
    log.Println(err)
}
ログイン後にコピー

デコーダーは非標準の時刻形式を解析できないため、エラーが発生します。これに対処するには、時間値のカスタム タイプ エイリアスを作成し、カスタム マーシャル関数とアンマーシャル関数を実装します。

実装例は次のとおりです。

// Type alias
type JsonBirthDate time.Time

// Implement UnmarshalJSON
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
}

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

// Example use in struct
type Person struct {
    Name string `json:"name"`
    BirthDate JsonBirthDate `json:"birth_date"`
}
ログイン後にコピー

これらのカスタム関数を使用すると、 JSON データは、非標準の時刻形式が適切に解析され、ターゲットの Person 構造体に正常にデコードできるようになりました。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート