「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go JSON アンマーシャリングで入れ子になった配列を処理するには?

Go JSON アンマーシャリングで入れ子になった配列を処理するには?

2024 年 11 月 8 日に公開
ブラウズ:695

How to Handle Nested Arrays in Go JSON Unmarshalling?

Golang JSON: アンマーシャリングによるネストされた配列の処理

Go では、アンマーシャリング後にネストされた JSON 配列を操作する場合、エラーを理解することが重要です「タイプ インターフェイス {} はインデックス作成をサポートしていません。」このエラーは、interface{} 変数に格納されている JSON 配列内の要素にアクセスしようとすると発生します。

この問題を解決するには、型アサーションを利用して、interface{} 変数を基礎となる配列タイプ。

インターフェイス{} JSON モジュールでの表現

JSON モジュールは配列を []インターフェイス{}として表しますスライスと辞書は、interface 変数にデコードするときに、map[string]interface{} マップとしてマッピングされます。

型アサーションを使用したネストされた要素へのアクセス

エラー チェックを行わないと、次のように型アサーションを使用して JSON 配列をナビゲートできます:

objects := result["objects"].([]interface{})
first := objects[0].(map[string]interface{})
fmt.Println(first["ITEM_ID"])

ただし、型が一致しない場合、これらの型アサーションはパニックを起こす可能性があることに注意することが重要です。この問題を回避するには、2 つのリターン形式を使用してエラーを確認します:

objects, ok := result["objects"].([]interface{})
if !ok {
    // Handle error here
}

アクセスを向上させるための構造へのデコード

JSON データが一貫した形式に従っている場合、より効率的な解決策は、それを構造化型にデコードすることです。たとえば、提供されたデータに基づきます:

type Result struct {
    Query   string `json:"query"`
    Count   int    `json:"count"`
    Objects []struct {
        ItemId      string `json:"ITEM_ID"`
        ProdClassId string `json:"PROD_CLASS_ID"`
        Available   int    `json:"AVAILABLE"`
    } `json:"objects"`
}

この構造にデコードすると、result.Objects[0].ItemId を使用してアイテム ID に直接アクセスできます。このアプローチにより、型アサーションの必要性がなくなり、ネストされた要素にアクセスするための型安全なメソッドが提供されます。

最新のチュートリアル もっと>

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

Copyright© 2022 湘ICP备2022001581号-3