#ios #swift #alamofire #swifty-json
#iOS #swift #alamofire #swifty-json
Вопрос:
данные не анализируются, я хочу проанализировать данные в словарь, затем в массив, а затем выполнить итерацию и сохранить их в пользовательском массиве. из структурированного JSON {"stores" : [{},{}]}
Код:
Alamofire.request(NEARBY_STORES, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON{ (response) in
if response.result.error == nil {
print(response)
if let dict = response as? NSDictionary
{ print("dict saved")
if let stores = dict["stores"] as? Array<AnyObject>
{
for items in stores
{
let storeName = items["name"] as? String
let storeCover = items["cover"] as? String
let minimumOrder = items["min_order_amt"] as? String
let storeRating = items["average_rating"] as? String
let storeSpeed = items["delievery_time"] as? String
let storeLogo = items["logo"] as? String
let shoplist = shopModel(shopName: storeName!, shopBGImage: storeCover!, shoplogo: storeLogo!, speed: storeSpeed!, accuracy: storeRating!, minimumOrder: minimumOrder!)
self.shopLists.append(shoplist)
print("PARSED")
Комментарии:
1. опубликуйте ожидаемый json
2. ОТВЕТ JSON ХОРОШИЙ, НО ОН НЕ ПЕРЕДАЕТ ЕГО В СЛОВАРЬ, А ЗАТЕМ В МАССИВ
3. Я думаю, что что-то не так с объявлением типов словаря и массива
4. Не используйте NSDictionary, предпочитает словарь (например
[String: Any]
, показать JSON, иначе мы не можем догадаться, что не так.5. Пожалуйста, отправьте json. Пока вы не опубликуете это, мы не сможем направлять вас.
Ответ №1:
Заменить, если let dict = response как? NSDictionary с if let dict = response.result.value как? NSDictionary и проверьте
Комментарии:
1. если let stores = dict[«stores»] как? Array<AnyObject> пожалуйста, помогите мне преобразовать это в массив
Ответ №2:
Я обычно использую SwiftyJSON для выполнения этого анализа.
if let result = response.result.value {
let dict = JSON(result)
print(dict)
//you can try to print your stores and continue with your logic
let stores = dict["stores"]
}
Ответ №3:
if let dict = response as? [String,Any]{
if let stores = dict["stores"] as? [[String:Any]]{
for items in stores{
//Do stuff here
}
}
}
Ответ №4:
Попробуйте это:
Alamofire.request(NEARBY_STORES, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: headers).responseJSON{ (response) in
if response.result.error == nil {
print(response)
if let dict = response as? Dictionary<String, Any> ?? [:]
{ print("dict saved")
if let stores = dict["stores"] as? Array ?? []
{
for items in stores
{
let itemDict = items as? Dictionary<String, Any> ?? [:]
let storeName = itemDict["name"] as? String
let storeCover = itemDict["cover"] as? String
let minimumOrder = itemDict["min_order_amt"] as? String
let storeRating = itemDict["average_rating"] as? String
let storeSpeed = itemDict["delievery_time"] as? String
let storeLogo = itemDict["logo"] as? String
let shoplist = shopModel(shopName: storeName!, shopBGImage: storeCover!, shoplogo: storeLogo!, speed: storeSpeed!, accuracy: storeRating!, minimumOrder: minimumOrder!)
self.shopLists.append(shoplist)
print("PARSED")