Go で JSON 文字列内の重複する属性を検出する
Go で JSON 文字列内の重複する属性を特定するにはどうすればよいですか? JSON デコードとキー値分析を使用したソリューションを詳しく見てみましょう。
JSON 文字列のデコード
json.Decoder を利用して JSON 文字列を走査します。オブジェクトに遭遇すると、そのキーと値を反復処理して重複を探します。
重複のチェック
チェック関数内で、異なる区切り文字とハンドルを区別します。それぞれのケースを個別に:
使用法例
その機能を実証するために、重複キーのパスを出力する printDup 関数を定義し、サンプル JSON 文字列でチェックを呼び出します。
func printDup(path []string) error { fmt.Printf("Duplicate %s\n", strings.Join(path, "/")) 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
による重複の処理エラー
または、最初に見つかった重複キーでエラーを生成することもできます:
var ErrDuplicate = errors.New("duplicate") func dupErr(path []string) error { return ErrDuplicate } ... data := `{"a": "b", "a":true,"c":["field_3 string 1","field3 string2"], "d": {"e": 1, "e": 2}}` err := check(json.NewDecoder(strings.NewReader(data)), nil, dupErr) if err == ErrDuplicate { fmt.Println("found a duplicate") } else if err != nil { // some other error log.Fatal(err) }
以上がGo を使用して JSON 文字列内の重複属性を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。