首頁 >後端開發 >Golang >如何處理不一致的 JSON 欄位:字串與陣列?

如何處理不一致的 JSON 欄位:字串與陣列?

Barbara Streisand
Barbara Streisand原創
2024-12-05 03:51:13216瀏覽

How to Handle Inconsistent JSON Fields: Strings vs. Arrays?

處理不一致的JSON 欄位:字串與陣列的情況

處理不完全一致的JSON 資料時,可能會出現挑戰在解組過程中。當 JSON 中的特定欄位的格式發生變化,從而給解組過程帶來困難時,就會發生這種情況。

問題:

考慮以下場景:

type MyListItem struct {
    Date  string `json:"date"`
    DisplayName       string `json:"display_name"`
}

type MyListings struct {
    CLItems []MyListItem `json:"myitems"`
}

JSON 資料有一個名為「display_name」的字段,該字段應為字符串。但是,在某些情況下,它也可以是字串陣列。這種不一致使解組過程變得複雜,從而導致錯誤。

解決方案:

為了克服這個挑戰,我們可以利用兩種技術:

  1. 利用json.RawMessage : 將有問題的欄位擷取為json.RawMessage 類型。
  2. 使用 JSON“-”名稱:在 JSON 解碼器中將“DisplayName”欄位定義為“-”以將其從解組過程中排除。

已更新程式碼:

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

解組JSON:

解組頂上JSON

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

提取「DisplayName」 “字段取決於其類型:

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, "&&")
    }
}

示例:

var listings MyListings
if err := json.Unmarshal([]byte(data), &listings); err != nil {
    // handle error
}
for i := range listings.CLItems {
    li := &listings.CLItems[i]
    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 字段,確保應用程式中正確的資料擷取與操作.

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

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