2016-08-01 7 views
1

ich Antwort von Buchse io Bibliothek mit Antwort wie dieseParse Daten aus socket.io Antwort swift

socket.on("response-names") {data, ack in 
 
      print(data) 
 
     }

diese drucken können,

[{ 
    "person": [{ 
     "_id":"56512323212132", 
     "name":"John Smith", 
     "id":"0000001", 
     "geolocation":{ 
      "latitude":5.12312323443, 
      "longitude":101.12312464564354 
     } 
    }] 
}] 

How do you Jungs Greifen Sie auf den Namen, die ID und die Geolokation (lat, long) in swift zu ?,

Soweit ich weiß, sind die Daten NSArray. aber Zugriff ist mit Daten [0] wird Null erzeugen. aber ich kann data.count tun, die zurückkehren wird mit 1.

Danke

+0

sein kein Array. seine Wörterbücher . Also versuchen Sie Daten ["Person"] –

+0

Es ist JSON. Sie müssen die Struktur von JSON verstehen, bevor Sie versuchen, die Werte abzurufen. Probiere Daten [0] ["Person"] aus? data [0] sollte dir Ergebnisse liefern (nicht nil), aber wenn du versucht hast, in ein NSArray zu casten, ist es falsch. Welchen Code soll man serialisieren? – Larme

+0

@larme Versuchen Sie Daten [0] ["Person"] produzieren "fataler Fehler: unerwartet gefunden Null beim Entpacken ein optionaler Wert" Ich schreibe meinen Serialisierungscode noch nicht, da ich versuchen möchte, zuerst auf den Namen zuzugreifen. Vielen Dank – damniatx

Antwort

0

Schließlich löste ich es, nur für zukünftige Referenz für andere. Es sieht so aus, als müssten Sie den Typ kennen, bevor Sie ihn analysieren. und überprüfe es mit Druck. und der Debug-Code wirklich hilft, so etwas wie NSCFArray bedeutet Ihre Daten als NSArray und versuchen, daraus zu lesen.

let dataArray = data as NSArray 

      let dataString = dataArray[0] as! String 
      let dataNewNow = dataString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)! 

      do { 
       let json = try NSJSONSerialization.JSONObjectWithData(dataNewNow, options: []) as! [String: AnyObject] 

       let str = json["person"] as! NSArray 
       let str2 = str[0] as! NSDictionary 

       let personName = str2["name"] as! String 
       let personId = str2["id"] as! String 

       let personGeoLocation = str2["geolocation"] as! NSDictionary 
       let personLatitude = personGeoLocation["latitude"] as! NSNumber 
       let personLongitude = personGeoLocation["longitude"] as! NSNumber 

       print("personName =", personName) 
       print("personID =", personId) 
       print("Person Latitude =", personLatitude) 
       print("Person Longitude =", personLongitude) 

      } catch let error as NSError { 
       print("Failed to load: \(error.localizedDescription)") 
      } 
0

in meinem Fall ist dies

let dataArray = data as NSArray 
let dataString = dataArray[0] as! String 
let dataNewNow = dataString.data(using: String.Encoding.utf8, allowLossyConversion: false)! 
do { 
let json = try JSONSerialization.jsonObject(with: dataNewNow, options: []) as! [String: AnyObject] 
let nMsgType = json["msg_type"] as! String 
print(nMsgType) 

} catch let error as NSError { 
print("Failed to load: \(error.localizedDescription)") 
}