2017-05-18 6 views
0

Ich habe Probleme, ein einfaches Json-Objekt von meiner PHP-Seite in meine iOS-App. Ich verwende Swift 3 in xcode 8. Ich habe mehrere Tutorials ohne Erfolg ausprobiert. Ich bekomme immer den Fehler "Fehler Domain = NSCOAErrorDomain Code = 3840" JSON Text nicht mit Array oder Objekt und Option zu ermöglichen, dass Fragmente nicht gesetzt. "Ich habe meine PHP-Seite mit einem Json-Validator überprüft und es scheint in Ordnung zu sein . Hilfe in der richtigen Richtung wird sehr geschätzt Hier ist meine Json-Daten, die auf meine pHP-Seite anklingtGet Json Daten von PHP-Seite in Swift 3

. { „SSID“: „TESTSSID“, „PASS“: „Testpass“}

Wie Sie Ich kann nur sehen, dass ich in der Lage bin, SSID und PASS in eine Variable in Swift zu bekommen, damit ich die Daten an die App ausgeben kann. Hier ist, was ich bisher für den schnellen Code habe schrecklich, ich bin ein Neuling und hackte es gerade zusammen)

Th in meinem ViewDidLoad ist,() ..

let urlString = "http://192.168.51.1/mytestPHP.php" 

    let url = URL(string: urlString) 
    URLSession.shared.dataTask(with:url!) { (data, response, error) in 
     if error != nil { 
      print(error) 
     } else { 
      do { 

       let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any] 
       let SSID = parsedData["SSID"] as! [String:Any] 

       print(SSID) 

      } catch let error as NSError { 
       print(error) 
      } 
     } 

}.resume() 

Antwort

0

In Ihrem JSON-Antwort beide SSID und PASS Tasten String als Wert nicht Dictionary.

do { 
    let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any] 
    if let ssid = parsedData["SSID"] as? String, 
     let pass = parsedData["PASS"] as? String { 
     print(ssid, pass) 
    } 
} catch let error as NSError { 
    print(error) 
} 

Hinweis: Als Fehler Ihre Antwort darauf hindeutet, ist so nicht gültig versuchen einmal Daten zu string konvertieren und überprüfen, was Sie als Antwort bekommen. Fügen Sie die folgende Zeile hinzu, bevor Sie JSONSerialization aufrufen und die Antwort darauf hier.

print(String(data: data!, encoding: .utf8)) 
+0

Vielen Dank für eine schnelle Antwort! Ich habe Ihren Do/Catch-Block ersetzt und den gleichen Fehler erhalten. Dann fügte die print-Anweisung vor der JSONSerialization hinzu und bekam diese ... –

+0

@JonBell was bekommen? –

+0

Optional (" \ n \ n \ n \ n APP INTERFACE \ n \ n \ n \ n {\" SSID \ ": \" TESTSSID \ ", \" PASS \ ": \" TESTPASS \ "} \ n \ n") Fehler Domain = NSCOAErrorDomain Code = 3840 "JSON-Text nicht mit Array oder Objekt und Option, um Fragmente nicht gesetzt zu ermöglichen." UserInfo = {NSDebugDescription = JSON-Text wurde nicht gestartet ... –

0

Sie sind im Grunde einen ungültigen JSON Fehler bekommen, also entweder PHP-Skript zurückgibt nicht den JSON Sie denken, es zurückkehrt oder es ist gar nichts zurück.

+0

Ja, ich dachte, das war der Fall, aber das ist genau, was auf dem Bildschirm aus dem PHP-Skript gedruckt wird. {"SSID": "TESTSSID", "PASS": "TESTPASS"} –

+0

es sieht so aus, als ob du json nicht drucken würdest, aber einfach nur string verwendest du dieses echo json_encode ($ data); ? Sie sollten Ihren PHP-Code zu der Frage hinzufügen, da dies das Problem ist. – null