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