2017-08-04 5 views
0

Ich versuche, JSON zu parsen, alles funktioniert gut, aber wenn ich versuche, einen Filter mit der URL zu geben, heißt es gefunden Null beim Auspacken eines optionalen Wertes. Ich habe mich gefragt, ob ich die Filter auf andere Weise geben sollte. PS .. Die URL funktioniert gut, wenn ich es im Browser verwendeSwift JSON Parsing mit einem Filter in der URL

dies ist, wie die URL mit Filter wie folgt aussieht:

https://start.jamespro.nl/v4/api/json/tasks/?filter=[{"column":"Date","operator":"=","value":"2017-08-04"}, {"column":"UserId","operator":"=","value":"2"}] 

und das ist mein ganzer Code ist:

func apiRequestTasks(url: String) { 
     apiRequestHeader(userName: "*******", passWord: "******") 
     var running = false 
     let urlProjects = NSURL(string: url) 
     let task = session?.dataTask(with: urlProjects! as URL) { 
      (data, response, error) in 
      if let taskHeader = response as? HTTPURLResponse { 
       print(taskHeader.statusCode) 
      } 
      if error != nil { 
       print("There is an error!!!") 
       print(error ?? "") 
      } else { 
       if let content = data { 
        do { 
         let dictionary = try JSONSerialization.jsonObject(with: content) as! [String:Any] 
         print(dictionary) 

        } 
        catch { 
         print("Error: Could not get any data") 
        } 
       } 
      } 
      running = false 
     } 


     running = true 
     task?.resume() 

     while running { 
      print("waiting...") 
      sleep(1) 
     } 

    } 
+0

die Werte der Filter nehmen und sie als Parameter in der Anfrage hinzufügen –

+1

Mindestens Sie Prozent kodieren haben die Leerzeichen, aber nicht die URL wirklich ein vollwertiges JSON-String als Parameter enthalten? Das ist urkomisch. – vadian

+0

@saroshmirza könnten Sie mir vielleicht ein Beispiel dafür geben? –

Antwort

0

Ich habe gerade den Filter Teil meiner codiert url und es hat funktioniert. Aber danke für die Reaktionen !!!

let filter = "[{\"column\":\"Date\",\"operator\":\"=\",\"value\":\"2017-08-04\"}, {\"column\":\"UserId\",\"operator\":\"=\",\"value\":\"2\"}]" 
     let encodedFilter = filter.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed) 
     let baseUrl = "https://start.jamespro.nl/v4/api/json/tasks/?filter=" 
     let url = baseUrl + encodedFilter! 
     apiRequestTasks(url: url) 
0

I denke, das Problem ist die Art und Weise, wie Sie Ihre URL erstellen, versuchen Sie etwas wie folgt:

let filters = "[\"column\":\"Date\",\"operator\":\"=\",\"value\":\"2017-08-04\"}, {\"column\":\"UserId\",\"operator\":\"=\",\"value\":\"2\"}]" 


if var url = URLComponents(string: "https://start.jamespro.nl/v4/api/json/tasks") { 
    url.query = "filter=:\(filters)" 
    print ("url", url.string ? "invalid url") 
}