2016-07-08 12 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私が解析するには、array代わりに、複数を作成するこの

[ 
{ 
    "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ループ構造は非常に重要です。それ以外の場合は正しく動作しません。この

1

のようになります。Dictionaryを含まれている作成このような。

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

は、今すぐあなたがこの

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

のように、この配列の辞書を使用して各要素にアクセスすることができ、この

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

のように、この配列内のすべてのオブジェクトを追加、これはあなたを助けることを願っています。

+0

これはいいですが、私が必要とするものではありません。別々の配列に各変数のデータを別々に保存しておき、後でコードの後ろにある各配列もループします。彼らを別々にしておくと、私は彼らをまっすぐに保つの – MNM

1

スウィフトに私を導くためのおかげので、あなたの@Niravに非常によく似

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) 
    } 

ITSはオブジェクト指向言語であるため、無関係な配列の束を使用するのではなく、カスタムオブジェクトを作成します。

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範囲内にあるとしなければならない、無意味である

struct Coupon { 

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

} 

parseCoupons使用スウィフトネイティブのコレクション型では、この方法は、解析されたCouponのアイテムを返します。繰り返しループで式myJson[item]as! NSDictionary)を何度も実行することは非常に非効率的です。

関連する問題