最新のプログラミング言語では、データ構造とネットワーク送信に対する要件がますます高くなっているため、JSON 形式も重要なデータ交換形式になっています。 JSON はより効率的にデータを送信でき、Go 言語はその高性能とシンプルなアプリケーション インターフェイスによりますます人気が高まっています。 Go では、JSON シリアル化をカスタマイズして、データ送信のニーズをより適切に満たすことができます。この記事では、Go でカスタム JSON シリアル化を使用する方法について説明します。
1. JSON シリアル化とは何ですか?
JSON シリアル化とは、オブジェクトを JSON 形式の文字列に変換し、ネットワーク送信中に他のサービスまたはクライアントに送信して、オブジェクトを正常に読み取って使用できるようにすることを指します。シリアル化された JSON 文字列では、各属性名が文字列に変換され、各値が JSON 内の対応する型に変換されて、異なる言語間での共通データが保証されます。
2. Go での JSON シリアル化
Go 言語では、標準ライブラリの「encoding/json」を使用して JSON シリアル化を実現できます。データ構造が一般的な構造と個別の値の場合、次に示すように、標準ライブラリの Marshal 関数を直接使用して、対応する JSON 文字列に変換できます。
type User struct { Username string `json:"username"` Password string `json:"password"` } func main() { user := User{"Amy", "123456"} jsonStr, err := json.Marshal(user) if err != nil { panic(err) } fmt.Println(string(jsonStr)) }
出力される JSON 文字列は次のとおりです。
{"username":"Amy","password":"123456"}
3. カスタム JSON シリアル化
Go 言語では、MarshalJSON メソッドと UnmarshalJSON メソッドを実装することで JSON シリアル化をカスタマイズできます。 MarshalJSON メソッドは構造または型を JSON 文字列に変換するために使用されますが、UnmarshalJSON は JSON 文字列を対応する構造または型に変換できます。
カスタム JSON シリアル化を実装する前に、いくつかの構造タグを理解する必要があります:
- json: 構造を定義するときは、フィールドの前に 'json:" を追加できます。custom_name"' JSON 文字列をシリアル化するときにフィールドの名前を定義します。
- omitempty: フィールド値が空でない場合、フィールドはシリアル化中に含まれ、フィールドが空の場合、フィールドは含まれません。
次に、給与を例としてカスタム JSON シリアル化を実装します。
type Salary struct { Basic int `json:"basic,omitempty"` Bonus int `json:"bonus,omitempty"` } func (s Salary) MarshalJSON() ([]byte, error) { var result string if s.Bonus != 0 { result = fmt.Sprintf(""basic":%d,"bonus":%d", s.Basic, s.Bonus) } else { result = fmt.Sprintf(""basic":%d", s.Basic) } return []byte("{" + result + "}"), nil } func main() { salary := Salary{ Basic: 10000, Bonus: 5000, } jsonStr, err := json.Marshal(salary) if err != nil { panic(err) } fmt.Println(string(jsonStr)) }
上記のコードを実行すると、出力される JSON 文字列は次のようになります:
{"basic":10000,"bonus":5000}
ここでは、Marsha にカスタム MarshalJSON メソッドを実装します。Bonus フィールドが 0 でない場合にのみ、値が出力されます。のみ; 0 の場合、フィールドは出力されません。
4. カスタマイズされた JSON 書式設定
Go 言語では、MarshalText メソッドと UnmarshalText メソッドを実装することで JSON 書式設定をカスタマイズすることもできます。 MarshalText メソッドは、構造体または型を []byte 形式のテキストに変換するために使用され、UnmarshalText は、[]byte 形式のテキストを対応する構造体または型に変換できます。
日付を例として、「2022-09-21」のような形式を出力するように JSON 書式設定関数をカスタマイズします。
type Date struct { time.Time } func (d Date) MarshalText() ([]byte, error) { return []byte(d.Time.Format("2006-01-02")), nil } func (d *Date) UnmarshalText(text []byte) error { parse, err := time.Parse("2006-01-02", string(text)) if err != nil { return err } d.Time = parse return nil } func main() { date := Date{time.Now()} jsonStr, err := json.Marshal(date) if err != nil { panic(err) } fmt.Println(string(jsonStr)) var newDate Date err = json.Unmarshal([]byte(""2022-09-21""), &newDate) if err != nil { log.Fatal(err) } fmt.Println(newDate.Time) }
上記のコードを実行すると、出力される JSON 文字列は次のようになります:
"2022-09-21" 2022-09-21 00:00:00 +0000 UTC
上記の例からわかるように、JSON のシリアル化と逆シリアル化をカスタマイズする場合は、JSON のシリアル化の原則とを理解する必要があります。標準ライブラリの実装は実際の開発に柔軟に適用できます。同時に、独自のオブジェクトの要件を満たす JSON 形式メソッドを定義することもできます。これにより、さまざまなシナリオでのデータ送信のニーズをより適切に満たすための基本的なツールとサポートが提供されます。
以上がGo でカスタム JSON シリアル化を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

goisidealforbuildingscalablessystemsduetoitssimplicity、効率性、およびビルド・インコンカレンシsupport.1)

intionSingOrunautomaticallyは()andareuseforstingupenments andinitializingvariables.usemforsimpletasks、回避効果を回避し、測定可能性を測定することを検討します。

goinitializeSpackages intheordertheyareimport extionsitions withinitionsiteintheirdefinition ordord、およびfilenamesdetermineTheOordCrossMultiplefiles.thisprocesccanbeandeanded by -dependenciessedieSiesは、このマイレアドカンフレシニティン化の対象となります

custominterfacesingoarecrucialforwritingfficable、maintable、andtatablecode.theyeNabledeveloveerStofofofovioroverimplementation、拡張、methodsodsignaturesthattypespessmustimment、interfaceforoderueusavelya

シミュレーションとテストにインターフェイスを使用する理由は、インターフェイスにより、実装を指定せずに契約の定義を可能にし、テストをより孤立し、メンテナンスしやすくするためです。 1)インターフェイスの暗黙的な実装により、モックオブジェクトを簡単に作成できます。これにより、テストの実際の実装を置き換えることができます。 2)インターフェイスを使用すると、ユニットテストでのサービスの実際の実装を簡単に置き換えることができ、テストの複雑さと時間を短縮できます。 3)インターフェイスによって提供される柔軟性により、さまざまなテストケースのシミュレートされた動作の変更が可能になります。 4)インターフェイスは、テスト可能なコードを最初から設計し、コードのモジュール性と保守性を向上させるのに役立ちます。

Goでは、init関数はパッケージの初期化に使用されます。 1)init関数は、パッケージの初期化時に自動的に呼び出され、グローバル変数の初期化、接続の設定、構成ファイルの読み込みに適しています。 2)ファイルの順序で実行できる複数のinit関数がある場合があります。 3)それを使用する場合、実行順序、テストの難易度、パフォーマンスへの影響を考慮する必要があります。 4)副作用を減らし、依存関係の注入を使用し、初期化を遅延させることをお勧めします。

go'sselectStatementStreamLinesConcurrentProgrambyMultipLexIngoperations.1)Itallow swaitingonMultipleChanneloperations、実行、exectingThefirstreadyone.2)

コンテキストアンドウェイトグループは、フォーマネングに焦点を合わせており、contextAllowsingSignalingCancellationAndDeadlinesAcrossapiboundariesを採用し、GoroutinesscanSclacefly.2)WaitGroupssynchronizeGoroutines、Allcompletebebroproproproproproproprotinesを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

Dreamweaver Mac版
ビジュアル Web 開発ツール

メモ帳++7.3.1
使いやすく無料のコードエディター

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

ホットトピック









