2017-02-21 16 views
0

内部構造体私はこのようになりますJSONファイルがあります。マップ[文字列]構造体

{ 
    "jailbreaks": [ 
    { 
     "jailbroken": false, 
     "name": "", 
     "version": "", 
     "url": "", 
     "anleitung": [], 
     "ios": { 
     "start": "10.2.1" 
     }, 
     "caveats": "", 
     "platforms": [] 
    }, 
    { 
     "jailbroken": true, 
     "name": "Yalu102", 
     "version": "beta 6", 
     "url": "https://domain-dl.tld", 
     "anleitung": [ 
     { "blog": "title", "link": "http://domain.tld/" }, 
     { "blog": "Test", "link": "http://google.at" } 
     ], 
     "ios": { 
     "start": "10.2" 
     }, 
     "caveats": "some text here", 
     "platforms": [ 
     "Windows", 
     "OS X", 
     "Linux" 
     ] 
    }, 

をそして私はこのように動作するオブジェクトを作成します。

type Jailbreak struct { 
    Jailbroken bool `json:"jailbroken"` 
    Name  string `json:"name"` 
    Version string `json:"version"` 
    URL  string `json:"url"` 
    Anleitung map[string]struct { 
     Name string `json:"blog"` 
     Link string `json:"link"` 
    } `json:"anleitung"` 

    Firmwares struct { 
     Start string `json:"start"` 
     End string `json:"end"` 
    } `json:"ios"` 

    Platforms []string `json:"platforms"` 
    Caveats string `json:"caveats"` 
} 

私が構築したいです私のgoプログラムJSONファイルを読むことができないというエラーが表示されます。しかし、私がmap[string]structを削除するとすぐに、私はエラーを出さずにプログラムをコンパイルして実行することができ、すべて正常に動作します。 JSONファイルに何か問題がありますか、エラーがありますか?

+2

json '' anleitung ''は配列ですが、それをマップに非整列化することはできません。 – JimB

+1

JSONのanleitungプロパティはオブジェクトではない配列です。非整列化には対応していません。 – PieOhPah

答えて

-1

JSONで "anleitung"が空である場合に、omitemptyフラグを使用してください。しかし、そうなら、あなたのJailbreak構造体には "anleitung"フィールドはありません。

マップのjsonフラグをに変更します。

Anleitung map[string]struct { 
    Name string `json:"blog"` 
    Link string `json:"link"` 
} `json:"anleitung,omitempty"` 

オプション2;

Anleitung map[string]interface{}でも使用できますが、「文字列のマップを任意のデータ型に保持する」方が適しています。あなたのケースでは、データは恣意的ではなく、むしろ空であると思います。それはただの一時的なものです。

オプション1に行くと、私の構造体にAnleitungデータが含まれているかどうかを確認してからアクセスします。

1

設けJSONは(アレイが閉鎖]とトップレベルのJSONオブジェクトを持っていないような他の閉鎖}を欠く)それでは、それはのようなものだと仮定する有効ではありません:

{ 
    "jailbreaks": [ 
    { 
     "jailbroken": false, 
     "name": "", 
     "version": "", 
     "url": "", 
     "anleitung": [], 
     "ios": { 
     "start": "10.2.1", 
     "end": "" 
     }, 
     "platforms": [], 
     "caveats": "" 
    }, 
    { 
     "jailbroken": true, 
     "name": "Yalu102", 
     "version": "beta 6", 
     "url": "https://domain-dl.tld", 
     "anleitung": [ 
     { 
      "blog": "title", 
      "link": "http://domain.tld/" 
     }, 
     { 
      "blog": "Test", 
      "link": "http://google.at" 
     } 
     ], 
     "ios": { 
     "start": "10.2", 
     "end": "" 
     }, 
     "platforms": [ 
     "Windows", 
     "OS X", 
     "Linux" 
     ], 
     "caveats": "some text here" 
    } 
    ] 
} 

データ構造Jailbreaks(第1)、マーシャル-へ/アンマーシャル-からこのJSON適切:

type Jailbreaks struct { 
    List []Jailbreak `json:"jailbreaks"` 
} 

type Jailbreak struct { 
    Jailbroken bool `json:"jailbroken"` 
    Name  string `json:"name"` 
    Version string `json:"version"` 
    URL  string `json:"url"` 
    Anleitung []struct { 
     Name string `json:"blog"` 
     Link string `json:"link"` 
    } `json:"anleitung"` 

    Firmwares struct { 
     Start string `json:"start"` 
     End string `json:"end"` 
    } `json:"ios"` 

    Platforms []string `json:"platforms"` 
    Caveats string `json:"caveats"` 
} 

あなたはAnleitungがスライス(ないマップとして宣言されて見ての通り)。

関連する問題