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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 17:23:02175ブラウズ

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 サイトの他の関連記事を参照してください。

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