Ich lese JSON von zwei Stellen 1) aus einer Datei und 2) von URL. das ist meine JSON-DateiBeim Lesen von Daten aus JSON mit SwiftyJSON wird Null zurückgegeben.
{
"People": {
"Person1" : {
"Name" : "Umair",
"Age" : "22"
},
"Person2" : {
"Name" : "Rehman",
"Age" : "28"
},
"Person3" : {
"Name" : "Saqib",
"Age" : "32"
},
"Person4" : {
"Name" : "Fahad",
"Age" : "18 "
},
}
}
und das ist, wie ich es SwiftyJson
mit lesenlet path: String = NSBundle.mainBundle().pathForResource("jsonFile", ofType: "json") as String!
let jsonData = NSData(contentsOfFile: path) as NSData!
let readableJSON = JSON(data: jsonData, options: .MutableContainers, error: nil)
var myName = readableJSON["People","Person1","Name"]
print(myName)
in Folge es mir den Namen hier kein Problem gibt. Wenn ich versuche, den JSON von der URL zu bekommen, benutze die gleiche Methode, bekomme aber die komplette JSON-Datei zurück, aber wenn ich versuche, ein bestimmtes Feld zu bekommen, gibt es null zurück. hier ist mein Code für die
let url = NSURL(string: "http://api.randomuser.me/")
let session = NSURLSession.sharedSession()
session.dataTaskWithURL(url!, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
// Make sure we get an OK response
guard let realResponse = response as? NSHTTPURLResponse where
realResponse.statusCode == 200 else {
print("Not a 200 response")
return
}
// Read the JSON
let readableJSONFromWeb = JSON(data: data!, options: .MutableContainers, error: nil)
var origin = readableJSONFromWeb["results"]
print(origin)
}).resume()
}
nach oben Code ich diese Ausgabe
Umair
[
{
"id" : {
"name" : "SSN",
"value" : "026-36-3780"
},
"nat" : "US",
"cell" : "(862)-296-4803",
"phone" : "(528)-560-7652",
"login" : {
"username" : "ticklishmouse295",
"password" : "julie",
"sha256" : "cae3a10c5813a7c5dfd069e2533860cf2786df4dc31a501eb66b9c37",
"sha1" : "46fa91a26c5219823b0c4a2c0fd99d390c997cd9",
"salt" : "aU4VTMOV",
"md5" : "be3f89edd4f22f333433d2424cbf4a95"
},
"registered" : 1144149087,
"dob" : 1170844810,
"picture" : {
"large" : "https:\/\/randomuser.me\/api\/portraits\/women\/40.jpg",
"thumbnail" : "https:\/\/randomuser.me\/api\/portraits\/thumb\/women\/40.jpg",
"medium" : "https:\/\/randomuser.me\/api\/portraits\/med\/women\/40.jpg"
},
"location" : {
"state" : "north carolina",
"street" : "9402 mcclellan rd",
"city" : "arvada",
"postcode" : 93836
},
"email" : "[email protected]",
"gender" : "female",
"name" : {
"title" : "mrs",
"first" : "ethel",
"last" : "palmer"
}
}
]
bekommen, aber wenn ich versuche, ein bestimmtes Feld zu bekommen mit
var origin = readableJSONFromWeb["results","location"]
ich null im Gegenzug
In Ihrem Remote-Zugriff, in dem Sie eine NSData Objekt mit dem JSON erhalten, Sie versehentlich die Daten _again_ lesen aus der URL mit 'NSData (contentsOfURL: url!)'. Sie müssen dies nicht tun - "session.dataTaskWithURL" hat bereits die 'NSData' in der Antwort zurückgegeben. – CouchDeveloper
danke für den Hinweis auf meinen dummen Fehler. Ich habe versucht, mit Daten von session.dataTaskWithURL gehen, aber Problem ist immer noch da –
var Herkunft = lesbarJSONFromWeb ["Ergebnisse"] var data = Ursprung ["location"] –