2017-03-16 14 views
0

私はウェブサイトからパブリックAPIを取得しようとしていますが、コールバックで応答を送信しています。 例:Swift jsonデータからコールバックを削除する

execute({"d":{"username":"Avi","status":"Active","regdate":"11/03/2017"}}); 

私はそれを解析するSwiftyJSONを使用していますが、それはnullを返します。

let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in 
    if error != nil { 
     print("ERROR") 
    } 
    else { 
     print("OK") 
     let jd = JSON(data: data!) 
     print(jd["d"]["username"]) 
    } 
} 

私はすでにNSStringにキャストしようとしましたが、私は置換えを適用できませんでした。 誰かが助けることができますか?私はこれでそれが感謝エリック彩に解決してきました

+0

削除(' '開始時と'削除)を実行します。その後、有効なJSON文字列になります。より良い選択肢は、APIにそのようなものを返さないようにすることです(おそらくURLパラメータを使用していますか?)しかし、あなたがこれを求めているかどうかはあまり選択肢がありません。 – Moritz

+0

残念ながら、エンドポイントは常にこのコールバックを返しますが、urlパラメータはそれを防ぐことができません。 – Avi

+0

データから文字列を作成し、余分な部分を削除してから、文字列を直接使用するか、コンテンツをデシリアライズする前に再度データに変換してください。 – Moritz

答えて

0
let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in 
    if error != nil { 
     print("ERROR") 
    } 
    else { 
     print("OK") 
     var callback = NSString(data: data, encoding: String.Encoding.utf8) 
     let regex = try! NSRegularExpression(pattern: "\\{(.*)\\}", options:.caseInsensitive) 
     let range = NSRange(location: 0, length: String(callback).characters.count) 
     let results = regex.matches(in: String(callback), options:[], range:range) 
     let jsonString = callback.substring(with: results[0].range) 
     let jd = JSON(string: jsonString) 
     print(jd["d"]["username"]) 
    } 
} 
0

:;最後に `

var dataString = String(data: data!, encoding: .utf8) 
      dataString = dataString?.replacingOccurrences(of: "execute(", with: "") 
      dataString = dataString?.replacingOccurrences(of: ");", with: "") 
      let json = dataString?.data(using: .utf8) 
      let jsonData = JSON(json!) 
関連する問題