ホームページ > バックエンド開発 > Golang > ネストされた JSON をデコードする際の「無効な操作: タイプ インターフェイス {} はインデックス作成をサポートしていません」エラーを回避する方法

ネストされた JSON をデコードする際の「無効な操作: タイプ インターフェイス {} はインデックス作成をサポートしていません」エラーを回避する方法

Mary-Kate Olsen
リリース: 2024-11-01 17:23:02
オリジナル
257 人が閲覧しました

How to Avoid

ネストされた JSON のデコードと型アサーションの問題の処理

ネストされた JSON データを取得する場合、実行時エラーを回避するために型アサーションを適切に処理することが重要です。そのようなエラーの 1 つは、「無効な操作: タイプ インターフェイス {} はインデックス付けをサポートしていません。」です。

このエラーは通常、インターフェイスの値をマップまたはスライスであるかのようにインデックス付けしようとしたときに発生します。{}次の例:

<code class="go">var d interface{}
json.NewDecoder(response.Body).Decode(&d)
test := d["data"].(map[string]interface{})["type"]</code>
ログイン後にコピー

この問題を解決するには、追加の型アサーションを実行して、interface{} 値を期待される型に変換する必要があります。この場合、最初にインターフェースを map[string]interface{} に変換し、次に「data」フィールドにアクセスして別の map[string]interface{} に変換してから、最後に「type」フィールドにアクセスします。

<code class="go">test := d.(map[string]interface{})["data"].(map[string]interface{})["type"]</code>
ログイン後にコピー

あるいは、初期型を必要とせずに、 d を map[string]interface{} 型として直接宣言することもできます。アサーション:

<code class="go">var d map[string]interface{}
json.NewDecoder(response.Body).Decode(&d)
test := d["data"].(map[string]interface{})["type"]</code>
ログイン後にコピー

同様のタイプのアサーションを頻繁に実行する場合は、プロセスを簡素化するために github.com/icza/dyno などのライブラリを利用することを検討してください。

以上がネストされた JSON をデコードする際の「無効な操作: タイプ インターフェイス {} はインデックス作成をサポートしていません」エラーを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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