首頁 >後端開發 >Golang >如何有效解組不一致的字串或陣列 JSON 欄位?

如何有效解組不一致的字串或陣列 JSON 欄位?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 14:53:14463瀏覽

How Can I Efficiently Unmarshal Inconsistent String or Array JSON Fields?

解組靈活的JSON 欄位:轉換不一致的字串或陣列值

問題

當欄位可能不一致時,解組JSON 可能會很困難,顯示為字串或字串陣列。這種不一致可能會導致解組錯誤,從而導致您的應用程式失敗。

解決方案

使用原始 JSON 資料捕獲

利用 json.RawMessage 資料結構來捕獲原始變化的 JSON 欄位作為原始資料。此外,利用 json“-”名稱標籤在初始解碼階段隱藏該欄位。

type MyListItem struct {
    Date           string          `json:"date"`
    RawDisplayName json.RawMessage `json:"display_name"`
    DisplayName    []string        `json:"-"`
}

解組頂層 JSON

解組頂層 -等級 JSON 結構,無需填入 DisplayName 欄位。

var li MyListItem
if err := json.Unmarshal(data, &li); err != nil {
    // handle error
}

解析原始顯示名稱

根據原始資料的類型,將顯示名稱解組為適當的格式。

if len(li.RawDisplayName) > 0 {
    switch li.RawDisplayName[0] {
    case '"':
        if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil {
            // handle error
        }
    case '[':
        var s []string
        if err := json.Unmarshal(li.RawDisplayName, &s); err != nil {
            // handle error
        }
        // Join arrays with "&&"
        li.DisplayName = strings.Join(s, "&&")
    }
}

處理列表數組

將上述邏輯整合到循環中以處理 MyListings 中的 MyListItem物件數組

var listings MyListings
if err := json.Unmarshal([]byte(data), &listings); err != nil {
    // handle error
}
for i := range listings.CLItems {
    li := &listings.CLItems[i]
    // Parse raw display name
    if len(li.RawDisplayName) > 0 {
        switch li.RawDisplayName[0] {
        case '"':
            if err := json.Unmarshal(li.RawDisplayName, &li.DisplayName); err != nil {
                // handle error
            }
        case '[':
            var s []string
            if err := json.Unmarshal(li.RawDisplayName, &s); err != nil {
                // handle error
            }
            li.DisplayName = strings.Join(s, "&&")
        }
    }
}

封裝邏輯

對於重複出現不同類型的字段,可以考慮將解析邏輯封裝在實現 json.Unmarshaler介面的自訂類型中.

句柄數組值

要將欄位值保留為字串切片而不是連接字串,請相應地修改 multiString 類型。

這些技術提供了處理不一致 JSON 欄位的強大方法,確保成功的解組和準確的資料檢索。

以上是如何有效解組不一致的字串或陣列 JSON 欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn