Go でネストされた JSON 配列にアクセスするにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-04 14:54:30
オリジナル
943 人が閲覧しました

How Do I Access Nested JSON Arrays in Go?

Go でのネストされた JSON 配列へのアクセス

Go では、アンマーシャリング後にネストされた JSON 配列にアクセスするときに問題が発生します。応答の「objects」配列から要素を取得しようとすると、「type Interface {} はインデックス付けをサポートしていません」というエラーが発生する場合があります。

問題の理解

デフォルトでは、Go の JSON モジュールは配列を []interface{} スライスとして表し、辞書を map[string]interface{} マップとして表します。したがって、インターフェイス変数にデコードする場合、インデックスを直接使用してネストされた要素にアクセスすると失敗します。

解決策: 型アサーション

この問題に対処する 1 つのアプローチは、型アサーション。これには、interface 変数を基礎となる具象型に変換することが含まれます。{}たとえば、「objects」配列の最初のオブジェクトから ITEM_ID を抽出するには、次のようにします。

<code class="go">objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])</code>
ログイン後にコピー

エラー チェック付きの型アサーション

型アサーションを実行するときは、不正な変換を処理するためにエラー チェックを組み込むことが不可欠です。例:

<code class="go">objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle type conversion error
}</code>
ログイン後にコピー

構造へのデコード

既知の形式の JSON に推奨される代替ソリューションは、カスタム構造に直接デコードすることです。 JSON 構造と一致する構造体を定義し、それにデコードします:

<code class="go">type Result struct {
    Query string
    Count int
    Objects []struct {
        ItemId      string
        ProdClassId string
        Available   int
    }
}</code>
ログイン後にコピー

これにより、型アサーションの必要がなく、データに直接アクセスできるようになります:

<code class="go">var result Result
json.Unmarshal(payload, &result)
fmt.Println(result.Objects[0].ItemId)</code>
ログイン後にコピー

以上がGo でネストされた JSON 配列にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート