2016-05-24 6 views
2

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 lesen
let 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

+0

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

+0

danke für den Hinweis auf meinen dummen Fehler. Ich habe versucht, mit Daten von session.dataTaskWithURL gehen, aber Problem ist immer noch da –

+0

var Herkunft = lesbarJSONFromWeb ["Ergebnisse"] var data = Ursprung ["location"] –

Antwort

2

Subscripting wie folgt mit SwiftyJSON:

var origin = readableJSONFromWeb["results","location"] 

funktioniert nur, wenn der gesamte Pfad aus Wörterbüchern besteht.

Aber Ihr results Schlüssel enthält eine Array, so müssen Sie den Index des Array-Elements übergeben, die Sie erhalten möchten.

Beispiel das erste Element aus dem Array für das Erhalten:

var origin = readableJSONFromWeb["results",0,"location"] 

Ergebnis:

{ 
    "city" : "sittard-geleen", 
    "postcode" : 85004, 
    "street" : "4774 pieterskerkhof", 
    "state" : "flevoland" 
} 
+0

Ich habe es funktioniert, wusste aber nicht dieses dict und Array-Ding jetzt verstehe ich es. Danke für deine Zeit @EricD –

+0

Gern geschehen, Umair. Ich bin froh, dass ich helfen konnte. – Moritz