MarshalJSONを使用して、golangのjsonエンコーディングに任意のフィールドを追加できますか?

クリストファー:

次のコードスニペットを記述したとします。遊び心のある方のための完全なコードがここにあります。

type Book struct {
  Title        string
  Author       string
}

func main() {
  ms := Book{"Catch-22", "Joseph Heller"}
  out, err := json.MarshalIndent(ms, "", "  ")
  if err != nil {
    log.Fatalln(err)
  }
  fmt.Println(string(out))
}

このコードは、期待どおりに以下を出力します。

{
  "Title": "Catch-22",
  "Author": "Joseph Heller"
}

しばらくの間、Book構造体に含めずにフィールドをJSON出力に追加したいとしますおそらくジャンル:

{
  "Title": "Catch-22",
  "Author": "Joseph Heller",
  "Genre": "Satire"
}

を使用MarshalJSON()して、JSONペイロードに任意のフィールドを追加できますMarshal()か?何かのようなもの:

func (b *Book) MarshalJSON() ([]byte, error) {
    // some code
}

他の答えはこれは可能であるはずだと私に思わせますが、実装を理解するのに苦労しています。

エヴァン:

これが私の以前の答えよりも良い答えです。

type FakeBook Book

func (b Book) MarshalJSON() ([]byte, error) {
    return json.Marshal(struct {
        FakeBook
        Genre string
    }{
        FakeBook: FakeBook(b),
        Genre:    "Satire",
    })
}

匿名構造体フィールドは「マージ」されるため(いくつかの追加の考慮事項があります)、それを使用して、個々のフィールドの再マッピングを回避できます。FakeBookタイプを使用して、他の方法で発生する無限の再帰を回避することに注意してください

遊び場:http : //play.golang.org/p/21YXhB6OyC

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

デフォルトのASCIIエンコーディングで非ASCII文字を使用していますか?

分類Dev

Eclipseに追加のエンコーディングをインストールできますか?

分類Dev

binary.Read()を使用してバイトストリームを構造体にデコードするときに、すべてのフィールドにビッグ/リトルエンディアンを指定することは可能ですか?

分類Dev

Xcode 10は、特定のエンコーディングを使用して入力ファイルをデコードできませんでした

分類Dev

vimは私のファイルのエンコーディングをどのように知っていますか?私でさえしないとき

分類Dev

コードを使用してAWSELB上のインスタンスへのトラフィックルーティングを制御できますか

分類Dev

htmlページがテキストエディタでコーディングされて.htmlとして保存されるのと同じように、jpgファイルをコーディングしても同じことができますか?

分類Dev

同じファイルシステムで異なるエンコーディングを使用してファイル名をエンコードできますか(Linuxの場合)

分類Dev

gcloudコマンドまたは任意のbashスクリプトを使用して、すべてのバージョンから最新のapp-engineバージョンをフィルタリングするにはどうすればよいですか

分類Dev

add_rowを使用して、ワードプレスの高度なカスタムフィールドの柔軟なコンテンツフィールドにエントリをプログラムで追加します

分類Dev

XSDが使用するエンコーディングを明示的に提供していない場合、デフォルトでどのエンコーディングを使用する必要がありますか?

分類Dev

任意のエンコーディングのファイルでgrep / ackを使用するにはどうすればよいですか?

分類Dev

csvファイルをロードするときにどのようにエンコーディングをodoに渡しますか?

分類Dev

JSを使用してJSONデータサンプルから取得する場合のHTMLエンコーディング/デコーディングの問題

分類Dev

Watson Concept Insightsで、ウィキペディアに基づくデフォルトの概念グラフ以外の概念グラフを使用して、ドキュメントのコーパスを探索できますか?

分類Dev

デフォルトのエンコーディングを使用するコードを見つけるためにどのエンコーディングを使用しますか?

分類Dev

システムのエンディアンはcコードを使用して変更できますか

分類Dev

Fabricjsの画像フィルターを使用して1つの画像に2つのシェーディングカラーを適用できますか?

分類Dev

Clojureで追加のタイプフィールドを使用してレコードをJSONオブジェクトとしてエンコードする

分類Dev

iconvを使用してシェルのエンコーディングを変更できませんでした

分類Dev

golangを使用してYAMLから複数行の文字列フィールドをデコード/エンコードする

分類Dev

cmd.exeはどのエンコーディング/コードページを使用していますか?

分類Dev

1つのコマンドで `ffmpeg`を使用して、オーディオファイルを複数のセグメントにトリミングします

分類Dev

デフォルトのadmin(postgres)のエンコーディングを変更できますか?

分類Dev

バイトからメモリ内にzipファイルを作成します(任意のエンコーディングのテキスト)

分類Dev

Chardetを使用して非常に大きなファイルのエンコーディングを見つける

分類Dev

MVC 5スキャフォールディングは、多対多の関係の選択リストを追加できませんか?(足場を追加-エンティティフレームワークを使用して、ビューを備えたMVC 5コントローラー)

分類Dev

yamlを使用して、フィールドを動的に再コーディングし、データフレーム/ tibbleに追加します

分類Dev

Pythonでは、GZIPエンコーディングをどのようにデコードしますか?

Related 関連記事

  1. 1

    デフォルトのASCIIエンコーディングで非ASCII文字を使用していますか?

  2. 2

    Eclipseに追加のエンコーディングをインストールできますか?

  3. 3

    binary.Read()を使用してバイトストリームを構造体にデコードするときに、すべてのフィールドにビッグ/リトルエンディアンを指定することは可能ですか?

  4. 4

    Xcode 10は、特定のエンコーディングを使用して入力ファイルをデコードできませんでした

  5. 5

    vimは私のファイルのエンコーディングをどのように知っていますか?私でさえしないとき

  6. 6

    コードを使用してAWSELB上のインスタンスへのトラフィックルーティングを制御できますか

  7. 7

    htmlページがテキストエディタでコーディングされて.htmlとして保存されるのと同じように、jpgファイルをコーディングしても同じことができますか?

  8. 8

    同じファイルシステムで異なるエンコーディングを使用してファイル名をエンコードできますか(Linuxの場合)

  9. 9

    gcloudコマンドまたは任意のbashスクリプトを使用して、すべてのバージョンから最新のapp-engineバージョンをフィルタリングするにはどうすればよいですか

  10. 10

    add_rowを使用して、ワードプレスの高度なカスタムフィールドの柔軟なコンテンツフィールドにエントリをプログラムで追加します

  11. 11

    XSDが使用するエンコーディングを明示的に提供していない場合、デフォルトでどのエンコーディングを使用する必要がありますか?

  12. 12

    任意のエンコーディングのファイルでgrep / ackを使用するにはどうすればよいですか?

  13. 13

    csvファイルをロードするときにどのようにエンコーディングをodoに渡しますか?

  14. 14

    JSを使用してJSONデータサンプルから取得する場合のHTMLエンコーディング/デコーディングの問題

  15. 15

    Watson Concept Insightsで、ウィキペディアに基づくデフォルトの概念グラフ以外の概念グラフを使用して、ドキュメントのコーパスを探索できますか?

  16. 16

    デフォルトのエンコーディングを使用するコードを見つけるためにどのエンコーディングを使用しますか?

  17. 17

    システムのエンディアンはcコードを使用して変更できますか

  18. 18

    Fabricjsの画像フィルターを使用して1つの画像に2つのシェーディングカラーを適用できますか?

  19. 19

    Clojureで追加のタイプフィールドを使用してレコードをJSONオブジェクトとしてエンコードする

  20. 20

    iconvを使用してシェルのエンコーディングを変更できませんでした

  21. 21

    golangを使用してYAMLから複数行の文字列フィールドをデコード/エンコードする

  22. 22

    cmd.exeはどのエンコーディング/コードページを使用していますか?

  23. 23

    1つのコマンドで `ffmpeg`を使用して、オーディオファイルを複数のセグメントにトリミングします

  24. 24

    デフォルトのadmin(postgres)のエンコーディングを変更できますか?

  25. 25

    バイトからメモリ内にzipファイルを作成します(任意のエンコーディングのテキスト)

  26. 26

    Chardetを使用して非常に大きなファイルのエンコーディングを見つける

  27. 27

    MVC 5スキャフォールディングは、多対多の関係の選択リストを追加できませんか?(足場を追加-エンティティフレームワークを使用して、ビューを備えたMVC 5コントローラー)

  28. 28

    yamlを使用して、フィールドを動的に再コーディングし、データフレーム/ tibbleに追加します

  29. 29

    Pythonでは、GZIPエンコーディングをどのようにデコードしますか?

ホットタグ

アーカイブ