「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 既知および未知のキー/値ペアを含む JSON を Go 構造体に解析するにはどうすればよいですか?

既知および未知のキー/値ペアを含む JSON を Go 構造体に解析するにはどうすればよいですか?

2024 年 11 月 7 日に公開
ブラウズ:848

How to Parse JSON with Known and Unknown Key/Value Pairs into a Go Struct?

任意のキー/値ペアを使用して JSON を構造体にアンマーシャルする

問題

既知および未知のキー/値ペアを使用して JSON 文字列を解析するにはどうすればよいですかGo 構造体に入れる?不明なフィールドには、任意の名前と値の型 (string、bool、float64、または int) を指定できます。

Solution

既知のフィールドを含む構造体と、不明なフィールドのマップのスライスを作成します。 :

type Message struct {
    Known1   string `json:"known1"`
    Known2   string `json:"known2"`
    Unknowns []map[string]interface{}
}

JSON 文字列を次の構造体にアンマーシャルします:

json.Unmarshal([]byte(jsonMsg), &msg)

Unknowns フィールドにはリストが含まれます未知のキーと値のペアを表すマップ。

Alternatives

  1. Double Unmarshal:

    • まず、アンマーシャルします既知のフィールドのみを含む一時構造体に変換します。
    • 次に、マップ[文字列]インターフェース{}に再度アンマーシャリングし、未知の値を手動で抽出します。
  2. アンマーシャルと型変換:

    • マップ[文字列]インターフェースにアンマーシャルします{}。
    • マップを反復処理し、値を適切な型にアサートします.

考慮事項

3 つの解決策はすべて有効ですが、最もシンプルでエレガントなのは、最初の構造体ベースのアプローチです。これにより、追加のアンマーシャルや手動の型変換の必要がなくなります。

最新のチュートリアル もっと>
  • PHP 連想配列内で検索する方法 – 簡単なヒント
    PHP 連想配列内で検索する方法 – 簡単なヒント
    連想配列は PHP の基本的なデータ構造であり、開発者はキーと値のペアを保存できます。これらは多用途であり、構造化データを表すためによく使用されます。 PHP 連想配列内の特定の要素を検索するのは一般的なタスクです。ただし、PHP で使用できるほとんどのネイティブ関数は、単純な配列でもうまく機能しま...
    プログラミング 2024 年 11 月 7 日に公開
  • Web 開発の未来: すべての開発者が知っておくべき新たなトレンドとテクノロジー
    Web 開発の未来: すべての開発者が知っておくべき新たなトレンドとテクノロジー
    導入 Web 開発は、初期の静的な HTML ページとシンプルな CSS デザインから大きく進歩しました。技術の進歩と、よりダイナミックでインタラクティブで応答性の高い Web サイトに対するユーザーの需要の高まりにより、この分野は長年にわたって急速に進化してきました。インターネッ...
    プログラミング 2024 年 11 月 7 日に公開
  • ays 初心者の Python コード者は ChatGPT を使用できます
    ays 初心者の Python コード者は ChatGPT を使用できます
    初心者の Python 開発者は、きれいなコードの作成からエラーのトラブルシューティングまで、数え切れないほどの課題に直面します。 ChatGPT は、生産性を向上させ、コーディング作業を合理化するための秘密兵器となります。際限なくドキュメントやフォーラムを調べる代わりに、ChatGPT に直接質...
    プログラミング 2024 年 11 月 7 日に公開
  • システムに Deno をインストールする
    システムに Deno をインストールする
    ? Windows への Deno のインストール: クイックガイド やあ、皆さん! ? Deno に飛び込む準備はできましたか?この素晴らしいランタイムを Windows マシンにインストールして始めましょう。とても簡単ですので、ステップバイステップでご案内します! ...
    プログラミング 2024 年 11 月 7 日に公開
  • Mac OS X で複数の Java バージョンを効果的に管理するにはどうすればよいですか?
    Mac OS X で複数の Java バージョンを効果的に管理するにはどうすればよいですか?
    Mac OS X での複数の Java バージョンの管理Mac OS X で開発する場合、互換性要件が異なるさまざまなプロジェクトに複数の Java バージョンが必要になる場合があります。この記事では、Mac に複数の Java バージョンを効果的にインストールして管理する方法について説明します。H...
    プログラミング 2024 年 11 月 7 日に公開
  • Neowith Java をマスターする: セットアップ、クエリ、トランザクション、視覚化
    Neowith Java をマスターする: セットアップ、クエリ、トランザクション、視覚化
    Neo4j は、高度に接続されたデータの管理に優れた強力なグラフ データベースです。 Java と組み合わせると、複雑な関係モデリングを必要とするアプリケーションを構築するための堅牢なソリューションが提供されます。この投稿では、Java で Neo4j を使用するための基本を説明し、セットアップ、ク...
    プログラミング 2024 年 11 月 7 日に公開
  • JavaScript の主なバグ (およびその回避方法)
    JavaScript の主なバグ (およびその回避方法)
    JavaScript は非常に強力で適応性のある言語ですが、検出が難しい問題が発生する可能性もあります。このブログ記事では、開発者が JavaScript を使用する際に発見する最も一般的な 5 つの欠陥と、これらの問題の理由と解決策を見ていきます。経験豊富な開発者であっても、初心者であっても、これ...
    プログラミング 2024 年 11 月 7 日に公開
  • Laravel モデルでの熱心にロードされた関係を制限する
    Laravel モデルでの熱心にロードされた関係を制限する
    導入 Laravel モデルにリレーションシップを熱心に読み込む場合、返される関連モデルの数を制限したい場合があります。 たとえば、ブログ プラットフォームでは、システム内のすべての著者とその 3 つの投稿を読み込むことができます。 Laravel の古いバージョンでは、熱心にロー...
    プログラミング 2024 年 11 月 7 日に公開
  • GDB を使用して C++ でベクター要素を印刷する方法
    GDB を使用して C++ でベクター要素を印刷する方法
    GDB 経由で C でベクトル要素を出力GDB で C コードをデバッグする場合、std::vector の内容を調べるのは困難な場合があります。たとえば、myVector という名前の std::vector について考えてみましょう。要素を効果的に出力するにはどうすればよいですか?GCC 4.1...
    プログラミング 2024 年 11 月 7 日に公開
  • 異なるブラウザ間でドロップダウン リストの幅をカスタマイズするにはどうすればよいですか?
    異なるブラウザ間でドロップダウン リストの幅をカスタマイズするにはどうすればよいですか?
    IE ドロップダウン リストの幅の変更Internet Explorer では、ドロップダウン リストはドロップボックスの幅を反映しますが、Firefox では、ドロップダウン リストはドロップボックスの幅に適応します。内容。この制約により、最長の選択範囲を収容するためにドロップボックスを拡張する必...
    プログラミング 2024 年 11 月 7 日に公開
  • C++ で書式設定するときに出力文字列を右揃えにする方法
    C++ で書式設定するときに出力文字列を右揃えにする方法
    C での右揃えによる出力文字列の書式設定 座標などのデータを含むテキスト ファイルを処理する場合、項目を列に揃える必要があります適切なフォーマットのために問題が発生することがよくあります。 C では、この位置合わせを実現するには出力文字列の操作が重要です。この記事では、出力文字列の右揃えの問題に対処...
    プログラミング 2024 年 11 月 7 日に公開
  • CSS グラデーション ジェネレーター
    CSS グラデーション ジェネレーター
    シリーズ「無料 CSS ツール」へようこそ。 このシリーズでは、完全に無料で使いやすい CSS ツールを紹介します。 このツールの使用方法について説明した後、そのツールへのリンクを共有します。 ツール リンク: このツールは webdevtales.com で入手できます。 ツール...
    プログラミング 2024 年 11 月 7 日に公開
  • ひとくちサイズの関数がコーディングの英雄になれる理由
    ひとくちサイズの関数がコーディングの英雄になれる理由
    コード愛好家の皆さん、こんにちは! ?無限の行の海の中で迷って、ある機能がどこで終わり、別の機能がどこで始まるのか疑問に思ったことはありませんか?私たちは皆、そこに行ったことがある。今日は、コードをより小さく管理しやすいチャンクに分割することが単なるベスト プラクティスではなく、開発スキルとキャリア...
    プログラミング 2024 年 11 月 7 日に公開
  • JavaScript の変数名におけるドル記号の意味は何ですか?
    JavaScript の変数名におけるドル記号の意味は何ですか?
    JavaScript 変数名にドル記号を使用する理由提供されている JavaScript コードには、「$item」という名前の変数が含まれています。質問: 変数名のドル記号の目的は何ですか?JavaScript では、変数名の先頭にあるドル記号はインタープリタにとって特別な意味を持ちません。これは...
    プログラミング 2024 年 11 月 7 日に公開
  • Laravel での認可 - 初心者ガイド
    Laravel での認可 - 初心者ガイド
    Laravel で認可をマスターする: ゲート vs. ポリシー クラス ?? 最新の Web アプリケーションでは、リソースにアクセスまたは変更できるユーザーを制御することが重要です。たとえば、ブログ アプリケーションでは、投稿の所有者のみが投稿を編集または削除できるようにしたい...
    プログラミング 2024 年 11 月 7 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3