ホームページ  >  記事  >  バックエンド開発  >  Golang で順序付けされたマップをマーシャリングする際の JSON キーのソートに関する問題

Golang で順序付けされたマップをマーシャリングする際の JSON キーのソートに関する問題

WBOY
WBOY転載
2024-02-09 10:00:28702ブラウズ

在 Golang 中编组有序映射时排序 JSON 键的问题

JSON キーの並べ替えは、Golang で順序付けされたマップをマーシャリングするときによく発生する問題です。データベースまたは他のデータ ソースからデータを取得して JSON 形式にマーシャリングする場合、多くの場合、出力される JSON オブジェクトのキー順序が一貫していることを確認するためにキーを並べ替える必要があります。 Golang でのこの機能の実装は複雑ではなく、構造体とスライスの組み合わせを使用してキーをソートする機能を実装できます。 JSON キーをソートするという目的は、キーと値のペアを構造体のスライスに保存し、sort パッケージを使用してスライスをソートすることで簡単に達成できます。この記事では、Golang で順序付きマップをマーシャリングするときに JSON キーを並べ替える方法を説明し、そのプロセスを示す簡単なコード例を示します。

質問の内容

指定された JSON フラグメントを反復処理する必要があり、配列にはマップに変換するための個々の項目が含まれています。これは簡単です。

問題は、JSON の一部を、提示された順序でクライアントに返す必要があることです。

OrderedMap の使用に関するガイドをいくつか見つけましたが、一貫性がないようです。

正しい順序が得られることもあれば、そうでないこともあります。

https://go.dev/play/p/b9hmS9BEymy

誰か提案できますか?ログから判断すると、問題は受信 JSON のアンマーシャリングにある可能性があります

私が扱う必要がある実際の JSON は非常に複雑で、バリエーションが非常に多いため多くの作業が必要になるため、構造体を使用することには本当に気が進みません。

回避策

map[string]interface{} を使用しているため、JSON のアンマーシャリングは順序に従いません。 golang のマップはハッシュマップであるため、これは驚くべきことではありません。 UnmarshalJSON 関数を作成し、カスタム アンマーシャリングを実行する必要があります。そうしないと、順序を保持できません。

マップを除く他のすべての型に対して標準のアンマーシャリングを使用できるため、作業が容易になります。これを行う方法の詳細が必要な場合は、それについても説明します

以上がGolang で順序付けされたマップをマーシャリングする際の JSON キーのソートに関する問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。