Go でオブジェクトまたは文字列の配列を使用した JSON アンマーシャリングを処理する
Go で JSON を構造体にアンマーシャリングするときに、以下を含む可能性があるフィールドが発生することがあります。リクエストごとにさまざまなタイプ (オブジェクトまたは文字列) が使用されます。たとえば、「mykey」という名前のフィールドには、インライン オブジェクトが含まれる場合もあれば、特定のパスにあるオブジェクトへの参照が含まれる場合もあります。この状況に対処するアプローチは、型がインターフェイス値のスライスであるフィールドを持つ構造体を定義することです。{}これにより、Go は受信した JSON に基づいてオブジェクトと文字列を適切な型に自動的にデコードするため、フィールドでオブジェクトと文字列の両方を保持できるようになります。次のコードはこれを示しています。
型チェック
JSON をアンマーシャリングした後、型スイッチを使用してスライス内のオブジェクトと文字列を区別できます。type Data struct { MyKey []interface{} `json:"mykey"` }
これにより、両方のタイプの値を構造化された効率的な方法で処理できるようになります。
例
for i, v := range data.MyKey { switch x := v.(type) { case string: fmt.Println("Got a string: ", x) case map[string]interface{}: fmt.Printf("Got an object: %#v\n", x) } }
次の JSON について考えます。
この JSON を Data 構造体にアンマーシャリングした後、MyKey スライスには 2 つの要素が含まれます。要素のそれぞれのタイプは、map[string]interface{}.
または、 JSON にはオブジェクトへの参照が含まれていました:{ "mykey": [ {obj1}, {obj2} ] }
以上がGo で変数データ型 (オブジェクトまたは文字列) を使用した JSON アンマーシャリングを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。