ホームページ >バックエンド開発 >Golang >Go で間違ってフォーマットされた日時をアンマーシャリングする方法は?

Go で間違ってフォーマットされた日時をアンマーシャリングする方法は?

DDD
DDDオリジナル
2024-11-07 21:48:03456ブラウズ

How to Unmarshal Incorrectly Formatted Datetime in Go?

不正にフォーマットされた日時フィールドをアンマーシャリングする

不正にフォーマットされた日時フィールドを含む JSON に遭遇した場合、それらを解析してアンマーシャリングするための堅牢な戦略を考案することが不可欠になります。 Go 構造体に組み込みます。通常、形式が正しくない場合は、タイムゾーン オフセットにコロン文字「:」が含まれていないことが原因で、アンマーシャリング エラーが発生します。

解決策: カスタム タイプと UnmarshalJSON メソッド

この問題を解決するには、正しい形式と間違った形式の両方をサポートするカスタム タイプを定義できます。

<code class="go">type MyTime struct {
    time.Time
}

func (self *MyTime) UnmarshalJSON(b []byte) (err error) {
    s := string(b)
    s = s[1:len(s)-1]

    t, err := time.Parse(time.RFC3339Nano, s)
    if err != nil {
        t, err = time.Parse("2006-01-02T15:04:05.999999999Z0700", s)
    }
    self.Time = t
    return
}</code>

アンマーシャリング時に、このタイプの UnmarshalJSON メソッドが呼び出されます。まず、JSON 文字列から周囲の引用符を削除します。次に、標準の time.RFC3339Nano 形式を使用して日時の解析を試みます。これが失敗した場合は、コロン文字のない間違った形式 ("2006-01-02T15:04:05.999999999Z0700") を使用して解析を試行します。

Struct Definition

Go 構造体内でこのカスタム タイプを使用するには:

<code class="go">type Test struct {
    Time MyTime `json:"time"`
}</code>

これにより、正しい日付時刻形式と正しくない日付時刻形式の両方を持つ JSON を同じ Go 構造体にアンマーシャリングできることが保証されます。

結論

適切な UnmarshalJSON メソッドを使用してカスタム時刻フィールド タイプを定義することにより、誤ってフォーマットされた日時フィールドを Go プログラムでシームレスに解析およびアンマーシャリングすることができます。これにより、入力データの処理の柔軟性が向上し、形式に関係なく、Go 構造体表現がデータを正確に反映することが保証されます。

以上がGo で間違ってフォーマットされた日時をアンマーシャリングする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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