2017-10-30 5 views
-1

ここで私はパラメータを正常にポストした後に応答を得ました。私はそれを元に戻す必要がありますが、ここで私がresponseStringにデータを保存していて、それを文字列の形式で保存していて、保存することができませんでし配列に保存し、誰もがどのように保存するために私を助けることができ、データがフォーマットここどのように応答をサーバーから得た文字列を迅速に3に配列を変換するには?

の下にあるのは、ここでは、サーバーの応答

[ 
    { 
    "carrier_code": "flatrate", 
    "method_code": "flatrate", 
    "carrier_title": "Flat Rate", 
    "method_title": "Fixed", 
    "amount": 0, 
    "base_amount": 0, 
    "available": true, 
    "error_message": "", 
    "price_excl_tax": 0, 
    "price_incl_tax": 0 
    }, 
    { 
    "carrier_code": "tablerate", 
    "method_code": "bestway", 
    "carrier_title": "Best Way", 
    "method_title": "Table Rate", 
    "amount": 0, 
    "base_amount": 0, 
    "available": true, 
    "error_message": "", 
    "price_excl_tax": 0, 
    "price_incl_tax": 0 
    } 
] 

はパラメータ

 func shippingmethodURL(shippingMethodAPI:String) { 
     let url = NSURL(string: shippingMethodAPI) 
     var request = URLRequest(url: url! as URL) 
     request.httpMethod = "POST" 
     print(shippingMethodAPI) 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let addtoCartVC = storyboard.instantiateViewController(withIdentifier: "checkout") as! CheckoutViewController 
     let parameters : [String: Any] = ["address": 
      [ "region": "California", 
       "region_code": "CA", 
       "region_id": "12", 
       "country_id": "US", 
       "company": "Test", 
       "telephone": "9492162752", 
       "postcode": "43", 
       "city": "Chennai", 
       "firstname": "gdfgdgdfg", 
       "lastname": "dgdfgdfgg", 
       "email": "[email protected]", 
       "prefix": "", 
       "sameAsBilling": 1, 
       "street": ["Dsfdsfsd dfdsfdsf dsfsfdsfsf sdfsfdsfsdfC"]]] 
     print(parameters) 
     do { 
      request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) 

     } catch let error { 
      print(error.localizedDescription) 
     } 
     request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
     print(request) 
     let task = URLSession.shared.dataTask(with: request) { data, response, error in 
      guard let data = data, error == nil else { 
       print("error=\(String(describing: error))") 
       return 
      } 

      if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { 
       print("statusCode should be 200, but is \(httpStatus.statusCode)") 
       print("response = \(String(describing: response))") 
      } 
      let responseString = String(data: data, encoding: .utf8) 
      print("responseString = \(responseString!)") 

      let status = (response as! HTTPURLResponse).statusCode 
      self.keyStatusCode = status 
      print(status) 
      let array = responseString 
     } 
     task.resume() 
    } 
を投稿するJSON機能であります
+0

モデルクラスを作成し、そのモデルクラスの配列を持つ必要があります。これで、取り出したオブジェクトを配列に保存できます。 –

+0

出力サーバーのデータをモデルクラスに接続する方法は? @ TusharSharma – user0246

+0

無関係ですが、サーバーには美的感覚がありません。 *きれいに印刷されたテキストは気にしません。 – vadian

答えて

2

それはあなたがこのコードに

let array = try JSONSerialization.jsonObject(with: data!) as? [[String : Any]] 

EDIT

let responseString = String(data: data, encoding: .utf8) 

を交換する必要があり、この

をachiveするJSONSerializationクラスを使用する必要がArrayあるしかしあなたがStringDataを変換します

このようにdo try catchブロックに入れる必要があります

do { 
     let array = try JSONSerialization.jsonObject(with: data) as? [[String : Any]] 

    } catch { 
     print("Exception occured \(error))") 
    } 
+0

エラーが発生しましたhttps://i.stack.imgur.com/Mh3dn.png @Jon Snow – user0246

+0

ブロックをキャッチしようとしました –

+0

@ user0246編集 –

関連する問題