」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Golang 中解析 JSON 中的非標準時間格式?

如何在 Golang 中解析 JSON 中的非標準時間格式?

發佈於2024-11-09
瀏覽:762

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

從 JSON 解析非標準時間格式

將 JSON 資料解碼為自訂結構時,可能會出現日期格式不一致的情況。為了解決這個問題,Golang 提供了實作自訂 marshal 和 unmarshal 函數的選項。

自訂Marshaler 和Unmarshaler 函數

要指定自訂解析格式,類型別名為時間欄位創建,Marshaler和Unmarshaler介面實作如下:

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 中的時間值,即使它們偏離標準格式也是如此。

最新教學 更多>
  • 如何在 MySQL SELECT 查詢中使用 IF 語句:語法與最佳實務指南
    如何在 MySQL SELECT 查詢中使用 IF 語句:語法與最佳實務指南
    MySQL SELECT 查詢中的IF 語句用法嘗試在MySQL SELECT 查詢中實現IF 語句時,您可能會遇到困難,因為具體語法要求。在 MySQL 中,傳統的 IF/THEN/ELSE 結構僅在預存程序和函數中可用。 要解決此問題,重構查詢至關重要。查詢中支援的 IF() 函數主要用於根據 ...
    程式設計 發佈於2024-11-17
  • 如何在Python中產生特定範圍內的唯一隨機數?
    如何在Python中產生特定範圍內的唯一隨機數?
    產生範圍內的唯一隨機數產生隨機數時,確保每個數字都是唯一的可能是一個挑戰。雖然可以使用條件語句來檢查重複項,但在處理大範圍或大數字時,這種方法會變得很麻煩。 產生唯一隨機數字列表的簡單方法是使用 Python 的 random.sample( ) 功能。此函數有兩個參數:總體(產生隨機數的數字範圍)...
    程式設計 發佈於2024-11-17
  • 如何使用佔位符和參數執行帶有“WHERE...IN”的 PDO 查詢?
    如何使用佔位符和參數執行帶有“WHERE...IN”的 PDO 查詢?
    PDO 查詢“WHERE...IN”為了使用PDO 增強數據庫訪問,許多開發人員遇到了挑戰,特別是“WHERE...IN” IN”查詢。讓我們深入研究其中的複雜性,並發現在PDO 準備好的語句中使用項目列表的正確方法。“WHERE... IN”難題考慮一個場景,您需要根據表單中已檢查項目的清單從資料...
    程式設計 發佈於2024-11-17
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-17
  • 如何有效率地存取和刪除Python字典中的任意元素?
    如何有效率地存取和刪除Python字典中的任意元素?
    存取 Python 字典中的任意元素在 Python 中,字典將鍵值對儲存在無序集合中。如果字典不為空,則可以使用下列語法存取任意(隨機)元素:mydict[list(mydict.keys())[0]]但是,這這種方法可能冗長且低效,特別是當您需要執行多次迭代時。讓我們探索更有效的方法來實現此目的...
    程式設計 發佈於2024-11-17
  • 如何使用 jQuery 製作背景顏色動畫?
    如何使用 jQuery 製作背景顏色動畫?
    使用 jQuery 淡化背景顏色引人注目的網站元素通常需要微妙的動畫,例如淡入和淡出。雖然 jQuery 廣泛用於動畫文字內容,但它也可用於動態增強背景顏色。 在 jQuery 中淡入/淡出背景顏色進行操作要使用 jQuery 設定元素的背景顏色,您首先需要合併 jQueryUI 函式庫。整合後,可...
    程式設計 發佈於2024-11-17
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-17
  • 在 Go 中嵌入結構:指標還是值?何時使用哪一個?
    在 Go 中嵌入結構:指標還是值?何時使用哪一個?
    Go 中嵌入結構:何時使用指標Go 中嵌入結構:何時使用指標當考慮將一個結構嵌入另一個結構時,決定是否使用指標或出現嵌入字段的值。本文探討了這種實現選擇的細微差別,並提供範例來說明潛在的好處和影響。 透過指標嵌入Go 規範允許將結構體嵌入為指標或價值。對於非介面類型,允許將匿名欄位指定為類型名稱 T...
    程式設計 發佈於2024-11-17
  • 如何解決在 MySQL 中將 @GenerateValue GenerationType.TABLE 與多態抽象超類別一起使用時出現「'where 子句'中的未知列 'sequence_name'」錯誤?
    如何解決在 MySQL 中將 @GenerateValue GenerationType.TABLE 與多態抽象超類別一起使用時出現「'where 子句'中的未知列 'sequence_name'」錯誤?
    @GeneratedValue MySQL 上的多態抽象超類別@GeneratedValue MySQL 上的多態抽象超類別在使用Hibernate 和MySQL 的Spring MVC 應用程式中,我們發現嘗試持久化抽象化抽象BaseEntity 的超類BaseEntity子類,遇到「表'...
    程式設計 發佈於2024-11-17
  • PHP 中可以不繼承修改類別方法嗎?
    PHP 中可以不繼承修改類別方法嗎?
    我可以在沒有繼承的情況下對類別進行猴子修補嗎? 您可能會遇到需要修改類別或其方法而沒有典型繼承選項的情況。以下面的類別為例:class third_party_library { function buggy_function() { return 'bad result';...
    程式設計 發佈於2024-11-17
  • 如何使用純 JavaScript 自動調整文字區域大小?
    如何使用純 JavaScript 自動調整文字區域大小?
    Textarea 自動高度這個問題旨在消除文本區域的滾動條並調整其高度以匹配其中的內容。提供了使用純JavaScript程式碼的解決方案:function auto_grow(element) { element.style.height = "5px"; element...
    程式設計 發佈於2024-11-17
  • 什麼時候手動呼叫析構函數是合法的做法?
    什麼時候手動呼叫析構函數是合法的做法?
    何時手動呼叫析構函數是合理的? 手動調用析構函數表明存在缺陷的設計這一概念經常被斷言。然而,這引出了一個問題:這條規則有例外嗎? 反例:需要手動析構函數呼叫的情況確實,在某些情況下有必要這樣做明確調用析構函數:1.受控記憶體釋放:當記憶體分配和釋放獨立於物件建構和銷毀進行管理時,手動析構函式呼叫變得...
    程式設計 發佈於2024-11-17
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-17
  • 為什麼我在 Django 資料庫查詢中收到「InterfaceError (0, \'\')\」?
    為什麼我在 Django 資料庫查詢中收到「InterfaceError (0, \'\')\」?
    在Django 查詢執行中遇到InterfaceError (0, '')Django 使用者可能會遇到持久的「InterfaceError (0 , '')” " 嘗試資料庫操作時出錯,特別是在伺服器重新啟動後。遊標,顧名思義,是與資料庫的持久連接,在多個...
    程式設計 發佈於2024-11-17
  • 使用 Go Module 部署 Go Cloud Functions 時如何解決「Build failed: go: parsing /models/go.mod: open /models/go.mod: no such file or directory\」錯誤?
    使用 Go Module 部署 Go Cloud Functions 時如何解決「Build failed: go: parsing /models/go.mod: open /models/go.mod: no such file or directory\」錯誤?
    使用Go 模組部署Google Cloud Function 錯誤嘗試使用Go 模組在Go 1.11 中部署Google Cloud Function 時,開發者可能會遇到錯誤,「建置失敗:go:解析/models/go.mod:開啟/models/go.mod:沒有這樣的檔案或目錄。」Go模組結構...
    程式設計 發佈於2024-11-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3