2016-04-15 6 views
-1

私はjsonファイルからデータを取り出して解析する関数を持っています。 jsonエントリの中には "colors"フィールド/配列がないものがあるため、そのエラーが発生しています。どのように私はこれを説明していないもののテキストとして "ERROR"を入れます。json missing fields swift

func getData2(){ 

    let dataPath = NSBundle.mainBundle().pathForResource("cardata", ofType: "json") 
    if let JSONData = NSData(contentsOfFile: dataPath!) 
    { 
     do 
     { 
      if let dictionariesArray = try NSJSONSerialization.JSONObjectWithData(JSONData, options: NSJSONReadingOptions()) as? 
       [[String: AnyObject]] 
      { 
       for dictionary in dictionariesArray 
       { 
        let name = dictionary["name"] as! String 
        let type = dictionary["type"] as! String 
        let text = String(dictionary["text"]) 
        if let printingsArray = dictionary["colors"] as? [String] 
        { 
         let printingsString = String(printingsArray.joinWithSeparator("-")) 
         nameColor[name] = printingsString 
        } 
        nameType[name] = type 
        nameText[name] = text 
       } 
      } 

     } 
     catch 
     { 
      print("Could not parse file at") 
     } 
    } 

    struct Card { 
     let name: String 
     let type: String 
     let colorr: String 
     let textt: String 

     init(name: String, type: String, textt: String, colorr:String) { 
      self.name = name 
      self.type = type 
      self.textt = textt 
      self.colorr = colorr 

     } 
    } 

    var goodCard = [Card]() 

    for (cardName, cardType) in nameType { 
     let cardText = nameText[cardName]! 
     let cardColor = nameColor[cardName]! //fatal error: unexpectedly found nil while unwrapping an Optional value 

     goodCard.append(Card(name: cardName, type: cardType, textt: cardText, colorr: cardColor)) 
    } 

    if typee != "" { 
     let redDogs = goodCard.filter {$0.type == typee} 
     print(redDogs) 
    } 
+0

可能な重複[JSONで「ゼロ」値を決定する](http://stackoverflow.com/questions/34509114/determine-nil-value-in-json) – ColGraff

答えて

0

可能であれば、強制アンラッピングオペレータ!を使用しないでください。 Optionalnilの場合、変数を使用すると例外がスローされます。代わりに値をアンラップするoptional bindingを使用します。

// optional binding 
if let cardColor = nameColor[cardName] { 
    // do something with the value 
}