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 中国語 Web サイトの他の関連記事を参照してください。