「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go で非標準の JSON 時刻形式をカスタム アンマーシャリングする方法

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

2024 年 12 月 23 日に公開
ブラウズ:686

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"))
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3