2016-07-08 100 views
0

我想通過json循環並將每個項目放入它自己的數組中。我不知道如何循環雖然json雖然。我已經成功去了,並放置一次json並填充數組,但現在我需要整個json到受尊重的數組。任何幫助將不勝感激通過json文件循環並填充數組Swift

這裏是我的了:

func parseCoupons(response : String) 
{ 
    print("Starting to parse the file") 
    let data = response.dataUsingEncoding(NSUTF8StringEncoding) 
    var myJson : NSArray 
    myJson = [] 

    do { 
     myJson = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! NSArray 
    } 
    catch { 
     print("Error") 
    } 

    for item in myJson.count { 
     titleArray.append((myJson[item]as! NSDictionary)["name"] as! String) 
     descriptionArray.append((myJson[item]as! NSDictionary)["description"] as! String) 
     amountArray.append((myJson[item]as! NSDictionary)["amount"] as! Int) 
     typeArray.append((myJson[item]as! NSDictionary)["type"] as! String) 
     startDateArray.append((myJson[item]as! NSDictionary)["start_date"] as! String) 
     endDateArray.append((myJson[item]as! NSDictionary)["end_date"] as! String) 
     barcodeArray.append((myJson[item]as! NSDictionary)["barcode"] as! String) 
    } 

並且json我想分析會這個樣子

[ 
{ 
    "name": "Coupon Title", 
    "description": "The Coupon Description", 
    "type": "PERCENT_OFF", 
    "amount": 15, 
    "barcode": "4948473", 
    "start_date": "2016-12-01", 
    "end_date": "2016-12-25", 

}, 

ECT ECT ECT 

] 

回答

0

我通過調整和使用它的代碼來使它工作。 for循環結構非常重要,否則它將無法正常工作。

for i in 0..<myJson.count 
    { 
     titleArray.append((myJson[i]as! NSDictionary)["name"] as! String) 
     descriptionArray.append((myJson[i]as! NSDictionary)["description"] as! String) 
     amountArray.append((myJson[i]as! NSDictionary)["amount"] as! Int) 
     typeArray.append((myJson[i]as! NSDictionary)["type"] as! String) 
     startDateArray.append((myJson[i]as! NSDictionary)["start_date"] as! String) 
     endDateArray.append((myJson[i]as! NSDictionary)["end_date"] as! String) 
     barcodeArray.append((myJson[i]as! NSDictionary)["barcode"] as! String) 
    } 

它非常類似於您@Nirav十分感謝領導給我這個

1

而不是創建多個array創建在包含Dictionary喜歡這個。

var arr : [NSDictionary] = [NSDictionary]() 

現在增加你所有的對象數組在這樣

for item in myJson.count { 
    arr.append(myJson[item] as! NSDictionary) 
} 

現在,您可以訪問使用該陣列的字典中的每個元素這樣

print((arr[0] as! NSDictionary)["name"] as! String) 

希望這會幫助你。

+0

這很好,但不完全是我所需要的。我希望單獨的數組能夠將每個變量的數據分開,並且稍後還將在代碼中循環每個數組。保持它們分開可以幫助我保持直立 – MNM

1

斯威夫特是一種面向對象的語言,所以創建一個自定義對象,而不是用一堆不相關的陣列。

struct Coupon { 

    var name : String 
    var description : String 
    var amount : Int 
    var type : String 
    var startDate : String 
    var endDate : String 
    var barcode : String 

} 

parseCoupons使用SWIFT本地集合類型,該方法返回的分析Coupon項目:

func parseCoupons(response : String) -> [Coupon] 
{ 
    print("Starting to parse the file") 
    let data = response.dataUsingEncoding(NSUTF8StringEncoding) 
    var coupons = [Coupon]() 

    do { 
    let myJson = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments) as! [[String:AnyObject]] 

    for item in myJson { 
     let name = item["name"] as! String 
     let description = item["description"] as! String 
     let amount = item["amount"] as! Int 
     let type = item["type"] as! String 
     let startDate = item["start_date"] as! String 
     let endDate = item ["end_date"] as! String 
     let barcode = item["barcode"] as! String 
     let coupon = Coupon(name: name, 
          description: description, 
          amount: amount, 
          type: type, 
          startDate: startDate, 
          endDate: endDate, 
          barcode: barcode) 
     coupons.append(coupon) 
    } 
    } 
    catch let error as NSError { 
    print("Error", error) 
    } 
    return coupons 
} 

PS:你do - catch塊是沒有意義的,在代碼必須do範圍內在重複循環中一次又一次執行表達式myJson[item]as! NSDictionary)效率非常低。