ホームページ バックエンド開発 Golang Go で JSON を解析するときにデフォルト値を設定するにはどうすればよいですか?

Go で JSON を解析するときにデフォルト値を設定するにはどうすればよいですか?

Dec 10, 2024 pm 05:12 PM

How Can I Set Default Values When Parsing JSON in Go?

Go を使用した JSON 解析のデフォルト値の指定

Go で JSON オブジェクトを解析する場合、フィールドにデフォルト値を指定する必要がある場合があります。入力 JSON では提供されません。次のフィールドを持つ構造体タイプを考えてみましょう:

type Test struct {
    A string
    B string
    C string
}
ログイン後にコピー

A、B、および C に必要なデフォルト値がそれぞれ "a"、"b"、および "c" であるとします。次の JSON を解析する場合:

{"A": "1", "C": 3}
ログイン後にコピー

予期される構造体は次のようになります:

Test{A: "1", B: "b", C: "3"}
ログイン後にコピー

encoding/json パッケージを使用する

ビルドされたGo の -in エンコーディング/json パッケージを使用すると、JSON 解析中にデフォルト値を指定できます。空の構造体を使用する代わりに、次のように必要なデフォルト値を含む構造体を提供します。

var example []byte = []byte(`{"A": "1", "C": "3"}`)

out := Test{
    A: "default a",
    B: "default b",
    // default for C will be "", the empty value for a string
}
err := json.Unmarshal(example, &out) // <-
if err != nil {
    panic(err)
}
fmt.Printf("%+v", out)
ログイン後にコピー

json.Unmarshal(example, &out) を呼び出すことにより、JSON は out 構造体にアンマーシャリングされ、値が上書きされます。 JSONで指定します。ただし、JSON に存在しないフィールドのデフォルト値は変更されません。例を実行すると、以下が返されます:

{A:1 B:default b C:3}
ログイン後にコピー

その他の Go ライブラリ

エンコーディング/json パッケージが特定の要件を満たしていない場合は、同様の機能を提供する他の Go ライブラリがあります。次の点を考慮してください:

  • [xjson](https://github.com/gobuffalo/x/blob/master/xjson/xjson.go) は、次の仕様を可能にするカスタマイズ可能な JSON パーサーを提供します。デフォルト値とその他のオプション。
  • [eson](https://github.com/sean-/eson) は別の JSON パーサーですこれは、default() メソッドを通じてデフォルト値をサポートします。

以上がGo で JSON を解析するときにデフォルト値を設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか? GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

GOの実際のパフォーマンスを正確に反映するベンチマークを作成するにはどうすればよいですか?

See all articles