首頁 >後端開發 >Golang >如何使用 Golang 偵測 JSON 字串中的重複屬性?

如何使用 Golang 偵測 JSON 字串中的重複屬性?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 20:29:11333瀏覽

How to Detect Duplicate Attributes in JSON Strings Using Golang?

使用Golang 偵測JSON 字串中的重複屬性

在JSON 字串中,透過防止完整屬性來維護資料完整性至重複屬性來維護資料完整性至關重要。 Golang 提供了一種便捷的方法來檢測和處理此類重複。

解:

要偵測 JSON 字串中的重複屬性,我們可以利用 json.Decoder 來遍歷JSON 結構。解碼時,我們檢查物件及其鍵,檢查是否有重複項。

提供的 Golang 程式碼示範了此過程:

func check(d *json.Decoder, path []string, dup func(path []string) error) error {
    // Handle token and delimeters
    t, err := d.Token()
    if err != nil {
        return err
    }

    delim, ok := t.(json.Delim)

    // Skip scaler types
    if !ok {
        return nil
    }

    switch delim {
    case '{':
        // Initialize map for keys and avoid duplicates
        keys := make(map[string]bool)

        for d.More() {
            key := t.(string)

            if keys[key] {
                return dup(append(path, key))
            }

            keys[key] = true

            if err := check(d, append(path, key), dup); err != nil {
                return err
            }
        }
    case '[':
        i := 0
        for d.More() {
            if err := check(d, append(path, strconv.Itoa(i)), dup); err != nil {
                return err
            }
            i++
        }
    }
    return nil
}

範例用法:

data := `{"a": "b", "a":true,"c":["field_3 string 1","field3 string2"], "d": {"e": 1, "e": 2}}`

if err := check(json.NewDecoder(strings.NewReader(data)), nil, printDup); err != nil {
    log.Fatal(err)
}

此範例將報告以下內容重複項:

Duplicate a
Duplicate d/e

自訂錯誤處理:

要在遇到第一個重複鍵時拋出錯誤,請修改dupErr() 函數,如下所示:

func dupErr(path []string) error {
    return ErrDuplicate
}

這種方法可以偵測重複的屬性,使您能夠採取適當的操作,例如記錄問題或過濾掉重複的屬性資料。

以上是如何使用 Golang 偵測 JSON 字串中的重複屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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