2016-08-22 46 views
1

我想在我的應用中使用JSON數據。所以我使用這個web服務調用方法來將我的json數據轉換爲數組。如何在發送到json解析器之前刪除xml標籤在swift中

func getData(path: String, completion: (dataArray: NSArray)->()) { 
    let semaphore = dispatch_semaphore_create(0) 
    // var datalistArray = NSArray() 
    let baseUrl = NSBundle.mainBundle().infoDictionary!["BaseURL"] as! String 
    let fullUrl = "\(baseUrl)\(path)" 

    print("FULL URL-----HTTPClient \(fullUrl)") 
    guard let endpoint = NSURL(string:fullUrl) else { 
     print("Error creating endpoint") 
     return 
    } 
    let request = NSMutableURLRequest(URL: endpoint) 
    NSURLSession.sharedSession().dataTaskWithRequest(request,completionHandler: {(data,response,error) in 
     do { 
      guard let data = data else { 
       throw JSONError.NoData 
      } 
      guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSArray else {//NSJSONReadingOptions.AllowFragments 
       throw JSONError.ConversionFailed 
      } 
      print(json) 
      if let data_list:NSArray = json { 

       completion(dataArray: data_list) 
       dispatch_semaphore_signal(semaphore); 


      } 

     }catch let error as JSONError { 
      print(error.rawValue) 
     } catch let error as NSError { 
      print(error.debugDescription) 
     } 





    }) .resume() 

    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 


} 

但現在我的服務發送XML標籤,如<string xmlns="http://tempuri.org/">json data</string所以我得到一個異常中的JSON數據時我嘗試轉換的json數據。這是一個例外。

Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.} 

我應該在發送到json解析器之前在我的代碼中更改以刪除這些標記嗎? 請幫幫我。 謝謝

回答

1

我認爲你從服務器得到的迴應是xml格式不在json。如果它的格式爲xml,那麼您必須執行xml parsing而不是json解析。

NSJSONSerialization.JSONObjectWithData是從數據(json格式的數據)給出json對象的json解析。

但是,如果您從服務器獲得xml格式的響應,那麼您應該使用NSXMLParser來解析數據。

如果你對它沒有太多的想法,那麼你可以參考像 XML Parsing using NSXMLParse in Swift by The appguruz這樣的教程,或者可以使用第三方庫。