2016-11-02 6 views
0

Я делаю некоторые webscrapping и могу получить исходный код html с моей желаемой страницы, но я отбрасываю его на NSString. Когда я пытаюсь преобразовать это в JSON, я получаю null, когда пытаюсь его распечатать. Когда я печатаю responseString2, я вижу исходный код, но как NSString. Что я делаю не так?Когда я конвертирую NSString в JSON, я получаю null

let task2 = URLSession.shared.dataTask(with: request2 as URLRequest) { data2, response, error in 
      guard error == nil && data2 != nil else {               // check for fundamental networking error 
       print("error2=\(error)") 
       return 
      } 

      if let httpStatus = response as? HTTPURLResponse , httpStatus.statusCode != 200 {   // check for http errors 
       print("statusCode2 should be 200, but is \(httpStatus.statusCode)") 
       print("response2 = \(response)") 
      } 

      let responseString2 = NSString(data: data2!, encoding: String.Encoding.utf8.rawValue) 

      print("hthpage \(responseString2)") 
      if let dataFromString = responseString2?.data(using: String.Encoding.utf8.rawValue, allowLossyConversion: false){ 
       let json = JSON(data: dataFromString) 
       print("JASON \(json)") 
      } 
+0

Проверьте, что такое результат responseString2.data. Дает ли она какую-либо ценность или она равна нулю? –

+0

@ Ajil O. Он дает мне исходный код веб-сайта, на котором я пытаюсь получить данные. – joethemow

ответ

0

Не конвертируйте данные-> строки-> данные.

Попробуйте этот код

и проверить ошибку, если произошла ошибка при преобразовании данных в формате JSON.

URLSession.shared.dataTask(with: request!) { (d, response, error) in 

     if let data = d 
     { 
      if let str = String(data: data, encoding: String.Encoding.utf8) 
      { 
       print("data->string : " + str) 
      } 

      do 
      { 
       if let obj = try JSONSerialization.jsonObject(with: data, options: []) as? [String:AnyObject] 
       { 
        DispatchQueue.main.async { 
         complete(obj) 
        } 
       } 
       else 
       { 
        print("Http - JsonSerialization Failed, not String:AnyObject Type!!") 
       } 
      } 
      catch let err as NSError 
      { 
       print("Http - JsonSerialization Error") 
       print(err) 
      } 
     } 
     else 
     { 
      if error != nil 
      { 
       print("Http - URLSession.shared.dataTask Error") 
       print(error) 
      } 
     } 
     }.resume() 
+0

Что такое 'complete (obj)'? – joethemow

+0

Кроме того, я получаю эту ошибку 'Http - JsonSerialization Error Ошибка домена = NSCocoaErrorDomain Code = 3840« Текст JSON не начинался с массива или объекта и не позволял фрагментам не устанавливать ». UserInfo = {NSDebugDescription = текст JSON не начинался с массива или объекта, а опция разрешала удаление фрагментов.} ' – joethemow

+0

complete() - мой параметр обратного вызова. :) – negaipro