ホームページ > バックエンド開発 > Golang > Golang を使用して JSON 文字列内の重複属性を検出するにはどうすればよいですか?

Golang を使用して JSON 文字列内の重複属性を検出するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-05 20:29:11
オリジナル
352 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート