2016-11-02 32 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

data-> string-> dataは変換しないでください。

は、このコード

を試してみて、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コード= 3840" JSONテキストは、配列またはオブジェクトとオプションでフラグメントが設定されていないことを開始していませんでした。 UserInfo = {NSDebugDescription = JSONテキストが配列やオブジェクトで始まっておらず、フラグメントが設定されないようにするオプション}} – joethemow

+0

complete()は自分のコールバックパラメータです。 :) – negaipro

関連する問題