2017-08-23 33 views
0

私はこのように呼ばれるクラスの構造体を持っています。構造体内に多くの構造体を入れるにはどうすればいいですか?

type ClassDetails struct { 
ClassNumber int `json:"classNumber"` 
Names []string `json:names`} 

私は手動でこれを作成しました。

type Subject struct { 
Math ClassDetails `json:"math"` 
Science ClassDetails `json:"science"`} 

私はその場でこれをやりたい情報を取得すると、ClassDetailsをSubjectに追加しますが、タイプクラスの配列は使用できません。 これはどのように行うことができますか?また、クラスの名前をjsonタグとして追加する必要もあります。 結果の構造体には、このような値を保持する必要があります。代わりに静的に各被験者を定義するの

{ 
    "classes": { 
     "school": "MayorWestHigh", 
     "math": [{ 
       "classNumber": "1", 
       "names": ["aaron", "baron", "cathy"] 
      }, 
      { 
       "classNumber": "2", 
       "names": ["aaron", "baron", "cathy"] 
      } 
     ], 
     "science": [{ 
      "classNumber": "1", 
      "names": ["ted", "baron", "isiah"] 
     }], 
     "geography": [{ 
      "classNumber": "1", 
      "names": ["peter", "glen", "joe"] 
     }] 

    } 
} 
+0

ポインタを使って..... –

+0

[ポインタを使ってgolang構造体関数を定義する]の可能な複製(https://stackoverflow.com/questions/25382073/defining) -golang-struct-function-using-pointer-or-not) – RayfenWindspear

+0

ポインタを使用した@BasileStarynkevitchは質問された質問に何の違いもありません。 – Adrian

答えて

2

、どのように単にサブジェクト名からマップを使用する方法について=>クラスの詳細の配列?

一つの方法として、次のようにあなたは私が上記のようなマップを使用したいJSONに非常に近い取得し、構造体の中にマップを埋め込むことができます。

type ClassDetails struct { 
    ClassNumber int  `json:"classNumber"` 
    Names  []string `json:names` 
} 

type Subjects map[string][]ClassDetails 

type Classes struct { 
    School string `json:"school"` 
    Subjects 
} 

上記Classes構造体のインスタンスご希望のJSONの以下の部分を記入します:

{ 
    "classes": { 
    ... the Classes instance goes here... 
    } 
} 

次のように残りの外側のオブジェクトだけで構築することができます。

c := Classes{...} 
outer := map[string]Classes{"classes": c} 

正しいデータが初期化されたouterオブジェクトのJSONマーシャリングは、ほぼ正確にあなたのJSON上に届きます(正確にはClassNumberを文字列型にする必要があります)。ここで

あなたが望む正確なデータでこれらの構造体を初期化し、あなたのJSONはプリティプリントゴー遊び場のリンクです:https://play.golang.org/p/HFMbHtY2os

EDIT:それはので、これはまだ正確には、あなたの質問にJSONと一致していませんそこに "科目"と呼ばれる新しいオブジェクトを追加します。問題は、JSON内の"classes"のオブジェクトが型を混在させ、Goが動的構造体フィールドを宣言できないことです。

JSON構造体を実際に使用する必要がある場合は、より汎用的なmap[string]interface{}を使用して、オブジェクト階層内の同じレベルの混合型を許可する必要があります。 https://play.golang.org/p/rlYTYGofSI

+0

異なる科目をクラスにラップしました。私はクラスの配列を使用することはできません。複数のクラスオブジェクトを持つ構造体でなければなりません。 –

+0

私は 'map [string] interface {}'を使った新しい遊び場のリンクで自分の答えを編集しました –

+0

ありがとう。私は今のところ一般的なタイプで暮らすことができます。 –

関連する問題