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