2016-04-14 6 views
0
[{"name":"Air Elemental","toughness":"4","printings":["LEA","BTD","7ED","8ED","9ED","10E","DD2","M10","DPA","ME4","DD3_JVC"]}] 

ich eine JSON, in dem es ein Array „Aufdrucke“, wie unten zu sehen ist, wie würde ich dieses Array nehmen jedes Angebot und wandeln es in einen String genannt ist wie "LEA-BTD-7ED". Hier ist, was ich bisher habe, aber es stürzt ab.Swift: in jeder Auflistung Arrays aus JSONs Parsing

let err : NSErrorPointer? 
    let dataPath = NSBundle.mainBundle().pathForResource("cardata", ofType: "json") 
    let data : NSData = try! NSData(contentsOfFile: dataPath! as String, options: NSDataReadingOptions.DataReadingMapped) 
    do{ 
     var contents = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments) as! [AnyObject] 

     for var i = 0;i<contents.count;++i{ 

       let printing = contents[i]["printings"] as! String 
       } 
     } 
+0

Was macht Ihr Absturz oder Fehler, den Sie sagen? – NRitH

+0

Der Wert des Typs '__NSCFArray' (0x107833d68) konnte nicht in 'NSString' (0x10888bb48) umgewandelt werden. Ich weiß es, weil ich versuche, das Array in eine Zeichenfolge umzuwandeln – user3015221

Antwort

0

Sie können keine Array (contents[i]["printings"]) zu einem String gegossen. Was Sie wollen, ist Array ‚s joinWithSeparator() Methode, wie folgt aus:

let printing = contents[i]["printing"] as! Array 
let printingStr = printing.joinWithSeparator("-") 

(Eigentlich bin ich nicht sicher, ob Sie die as! Array brauchen, versuchen Sie es ohne sie.)

+0

ohne Array funktioniert nicht, weil es einen Segmentierungsfehler denkt. Wenn Sie das Array verwenden, wird aus irgendeinem Grund ein Segmentierungsfehler verursacht. – user3015221

+0

Hmm. Muss "contents [i]" zuerst als "Dictionary" übersetzt werden? Woher weiß es, welcher Typ welcher ist? – NRitH

+0

Versuchte das auch. Das Problem ist, ich kann kein Objekt in Array konvertieren – user3015221

1

Hier ist der Code:

let path = dataPath! 
if let JSONData = NSData(contentsOfFile: path) 
{ 
    do 
    { 
     if let dictionariesArray = try NSJSONSerialization.JSONObjectWithData(JSONData, options: NSJSONReadingOptions()) as? 
      [[String: AnyObject]] 
     { 
      for dictionary in dictionariesArray 
      { 
       if let printingsArray = dictionary["printings"] as? [String] 
       { 
        let printingsString = printingsArray.joinWithSeparator("-") 
        print(printingsString) 
       } 
      } 
     } 

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

Ausführen druckt "LEA-BTD-7ED-8ED-9ED-10E-DD2-M10-DPA-ME4-DD3_JVC"