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

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

Mary-Kate Olsen
發布: 2024-12-05 14:53:14
原創
454 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板