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