2016-04-12 6 views
-1

Я хочу, чтобы словарь my json string, но он не работает, мои коды ниже, кажется, все ясно, но когда я запускаю код, его ошибка (ошибка не могла разобрать JSONs: ошибка была выброшена, но не NSDictionary)Почему мой json не словарь?

let url :NSURL = WebService.singleWebAddress 
    let session = NSURLSession.sharedSession() 
    let request = NSMutableURLRequest(URL: url) 
    let paramString = ["AdsID": 41642] as Dictionary<String, Int> 
     request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(paramString, options:[]) 
    request.HTTPMethod = "POST" 
    let err: NSError? 
    request.setValue("application/json ", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 
    let task = session.dataTaskWithRequest(request) { data, response, error in 
     guard data != nil else { 

      print("no data found: \(error)") 
      return 
     } 
     do { 
      let json = try! NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions()) 
      // Okay, the `json` is here, let's get the value for 'success' out of it 

      if let adsList = json[0] as? [[String: AnyObject]] { 

         dispatch_async(dispatch_get_main_queue(), {() -> Void in 

        for adsItem in adsList { 
         if let id = adsItem ["ID"] as?Int, let carName = adsItem ["CarName"] as? String , let productionyear = adsItem["ProductionYear"]as?Int , let price = adsItem["Price"] as?Int , let mileage = adsItem["Mileage"] as?Int , let cityName = adsItem ["CityName"] as?String , let adsDate = adsItem["AdsDate"] as?String, let fuelType = adsItem["FuelTypeName"] as?String ,let image = adsItem["Image"]as?NSArray ,let gearBox = adsItem["GearBox"]as?String , let bodyStatus = adsItem["BodyStatus"] as?String , let bodyColor = adsItem["BodyColor"] as?String ,let insideColor = adsItem["InsideColor"]as?String , let isSold = adsItem["IsSold"]as?Bool , let numberPlate = adsItem["NumberPlateName"]as?String , let cellphone = adsItem["CellPhone"]as?String , let description = adsItem["Description"]as?String       { 

          let singleads = SingleItem(id: id, image: image as! [String], carName: carName, productionYear: productionyear, price: price, mileage: mileage, cityName: cityName, adsDate: adsDate, fuelType: fuelType, gearBox: gearBox, bodyStatus: bodyStatus, bodyColor: bodyColor, insideColor: insideColor, isSold: isSold, numberPlateName: numberPlate, cellphone: cellphone, description: description) 



              } 
        }}) 

      } else { 
       let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) // No error thrown, but not NSDictionary 
       print("Error could not parse JSONs: \(jsonStr!)") 
      } 
     } catch let parseError { 
      print(parseError)               // Log the error thrown by `JSONObjectWithData` 
      let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding) 
      print("Error could not parse JSON: '\(jsonStr)'") 
     } 

     } .resume() 
    return task 
} 

Что мне делать?

+0

Не используйте 'try!', Просто 'try', чтобы вы могли поймать ошибку и посмотреть, что это такое. Добавьте образец необработанной строки JSON к вопросу. – Wain

+0

Как выглядит JSON? – smnk

+0

@Wain Я делаю это, но не работает – HeyJay

ответ

0

Ваш Json - это набор словарей. Попробуйте с

if let json = try NSJSONSerialization.JSONObjectWithData(data!, options: [NSJSONReadingOptions.MutableContainers]) as? [NSDictionary] {...} 
+0

его не работает :( – HeyJay

+0

выбросить ту же ошибку? – Manuel

+0

: да же ошибка – HeyJay

Смежные вопросы