2016-03-28 99 views
1

Java經驗的負載,但與Swift相關的n00b。我有以下的JSON,我從中沒有提取「圖像」陣列,這可能有多達3圖像...使用Swift從JSON中提取數組

{ 
     "status" : "OPEN", 
     "description" : 「…」, 
     "name" : 「…」, 
     "owner" : 1, 
     "images" : [ 
     { 
      "id" : 1, 
      "path" : "\/uploads\/1-60003456.jpeg" 
     } 
     ], 
     "created" : 1459135829000, 
     "id" : 1 
    } 

我一直運行到的編譯時和運行時主機錯誤。例如,從SwiftyJSON文檔驗證碼:

for (key,subJson):(String, JSON) in json { 
    if(key == "images"){ 
     let myImages = subJson.array 
     print(myImages![0]["path"]) 
    } 
} 

正確打印出來的價值「路徑」,還試圖保存在我的[字符串]的圖像,值:

images.append(myImages![0]["path"] as String) 

給出錯誤「不能用類型爲String的索引來標記JSON類型的值「

XCode告訴我subJson是」圖像「(或者它是一個字典數組嗎?)的NSDictionary,但是當我嘗試將它轉換爲,我得到「無法將JSON類型的值轉換爲在coersion中鍵入NSDictionary」。

我確定這是一個簡單的語法錯誤,但在這一點上,我只是在各種錯誤之間來回移動。感謝您的任何指導。

回答

0

不要使用向下轉換,SwiftyJSON已經完成了這項工作。 SwiftyJSON有對象的字符串表示一個可選的getter它已經被解析:

myImages![0]["path"].string 

因爲它是一個可選要安全地解開它:

if let path = myImages![0]["path"].string { 
    images.append(path) 
} 

如果myImages![0]["path"]不是一個字符串,那麼SwiftyJSON爲您提供儘可能多的可選干將,因爲有JSON類型:

myImages![0]["path"].array 
myImages![0]["path"].dictionary 
myImages![0]["path"].int 

隨着SwiftyJSON你也可以直接下標:

if let firstImagePath = json["images"][0]["path"].string { 
    // use "firstImagePath" 
} 

最後,另一種循環:

if let images = json["images"] { 
    for image in images { 
     if let path = image["path"].string { 
      // use "path" 
     } 
    } 
} 
+0

完美。謝謝,埃裏克。 – MolonLabe

+0

不客氣。 – Moritz