2016-12-01 18 views
-3

jsonを格納する次のデータ構造体を初期化する必要があります。 Attack_plansは複数のプランを保持し、GeneratePlan構造体をループすると、格納されているすべてのプランが必要になります。構造体の構造体(json出力を格納する)の配列をgolang内の構造体に初期化するには

type GeneratePlan struct { 
    Mode   string `json:"mode"` 
    Name   string `json:"name"` 
    Schema  string `json:"schema"` 
    Version  string `json:"version"` 
    Attack_plans []struct { 
     Attack_plan *Attack_plan `json:"attack-plan"` 
    } `json:"attack-plans"` 
} 
type Attack_plan struct { 
    Attack_resources []struct { 
     Attack_resource *Attack_resource `json:"attack-resource"` 
    } `json:"attack-resources"` 
} 

誰でもお勧めしますか?データ構造を初期化する前に単純化する必要がある場合は、それも提案してください。私はgolangにとって非常に新しいので、従うべきベストプラクティスを無視してください。どんな助けもありがとうございます。ありがとう!

+0

すべての構造体の値を保持するチェーンとして変数を作成しようとしました。しかし、私は "attackPlanは型ではなく、attackResourceは型ではありません"というエラーを受け取りました。 私は上記のようにある型の変数を別の型に代入することはできません。 =新しい(structs.GeneratePlan) attackPlan:=新しい(structs.Attack_plan) \t attackPlans:攻撃計画 \tを格納するため= [] // attackPlanスライスこれらは私が使用するコード、 計画のラインであります attackResource:= new(structs.Attack_resource) attackResources:= [] attackResource – Aishwarya

+0

2つの匿名構造体には、1つのフィールドがあります。あなたは何らかの理由でそれらを必要としますか?その場合は、宣言を再配置してすべての構造体の名前を指定します。 –

+0

@MellowMarmot どうすればいいですか?私はJSONファイルの値を格納するので、両方の構造体が必要です – Aishwarya

答えて

0

に答えることができました私は解決策を見つけました!これにより、上記のデータ構造が簡単になります。

type GeneratePlan struct{ 
    Mode string `json:"mode"` 
    Name string `json:"name"` 
    Schema string `json:"schema"` 
    Version string `json:"version"` 
    Attack_plans []struct1 `json:"attack-plans"` 

} 

type struct1 struct { 
    Attack_plan Attack_plan `json:"attack-plan"` 
} 


type Attack_plan struct{ 
    Attack_resouces []struct2 `json:"attack-resources"` 
} 

type struct2 struct { 
    Attack_resource Attack_resource `json:"attack-resource"` 
} 
0

はなぜuはちょうどJSON文字列に、あなたのオブジェクトをjson.marshalしていない、あなたは

+0

実際には、構造体はJSONとして値を出力します。私はその質問に言及すべきだった。それについての謝罪。 私は、特定の条件に基づいていくつかの値を取り出し、上記の構造体に値を格納するデータ構造を持っています。私は値を取得する方法の論理を持っています。私はちょうど上記の構造体を適切に初期化する方法が必要です。 – Aishwarya

0
generatePlan := GeneratePlan{ 
    Mode: "mode", 
    Name: "name", 
    Schema: "sachema", 
    Version: "version", 
    Attack_plans: []struct { 
     Attack_plan *Attack_plan `json:"attack-plan"` 
    }{ 
     {Attack_plan: &Attack_plan{[]struct { 
      Attack_resource *Attack_resource `json:"attack-resource"` 
     }{ 
      {Attack_resource: new(Attack_resource)}, 
      {Attack_resource: new(Attack_resource)}, 
     }}}, 
     {Attack_plan: &Attack_plan{[]struct { 
      Attack_resource *Attack_resource `json:"attack-resource"` 
     }{ 
      {Attack_resource: new(Attack_resource)}, 
      {Attack_resource: new(Attack_resource)}, 
     }}}, 
    }, 
} 
+0

使い方が複雑すぎます。どのように私の構造体を簡素化することができますか知っていますか?入れ子にするのではなく、どうやって別の構造体に分けることができますか? – Aishwarya

関連する問題