Ios 在swift 3中,如何将从服务器获得的响应从字符串转换为数组?
在这里,我在成功发布参数后得到了响应,我需要将其检索回来,但我遇到的问题是,我已将数据保存在Ios 在swift 3中,如何将从服务器获得的响应从字符串转换为数组?,ios,json,swift,Ios,Json,Swift,在这里,我在成功发布参数后得到了响应,我需要将其检索回来,但我遇到的问题是,我已将数据保存在responseString中,并且它以字符串的形式存储,当我尝试检索数据并保存在数组中时,无法保存,有人能帮助我如何保存数据吗,数据在下面格式 这是服务器响应 [ { "carrier_code": "flatrate", "method_code": "flatrate", "carrier_title": "Flat Rate", "method_title":
responseString
中,并且它以字符串的形式存储,当我尝试检索数据并保存在数组中时,无法保存,有人能帮助我如何保存数据吗,数据在下面格式
这是服务器响应
[
{
"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
}
]
下面是用于发布参数的json函数
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": "sfdsfsdf@gmail.com",
"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()
}
您正在将
数据
转换为字符串
,但是它是数组
您需要使用JSONSerialization
类来实现这一点
您必须替换此代码
let responseString = String(data: data, encoding: .utf8)
与
编辑
您需要将其放入中,并尝试像这样捕获块
do {
let array = try JSONSerialization.jsonObject(with: data) as? [[String : Any]]
} catch {
print("Exception occured \(error))")
}
您需要有一个模型类,然后有一个该模型类的数组。现在您可以将获取的对象保存在数组中。如何将输出服务器数据连接到模型类@Tushars与此相关,但服务器没有美感。它根本不关心漂亮的打印文本。你需要把它放在do try catch BlockThank working中如果我需要检索数据,那么我需要为它创建模型类@Jon Snower如果你使用Alamofire对象映射器(第三方库),它会自动为你做,您可以使用SwiftyJSONAccelerator
(Mac app)@LeoDabus编辑的应答器创建对象映射器类注意,添加本地化描述是多余的<代码>打印(“json错误:,错误)
do {
let array = try JSONSerialization.jsonObject(with: data) as? [[String : Any]]
} catch {
print("Exception occured \(error))")
}