2014-07-15 12 views
19

Cześć Obecnie uczę się Swift i chciałem wyodrębnić dane z JSON Api, kod My Swift wygląda tak. Mówiąc konkretnie, trzeba wyodrębnić za każdym klucz i jego wartość (na przykład: drukowanie wartości tytułem pokrycia etc ..)Swift - jak przechodzić przez NSDictionary

//Json request 
var error: NSError? 
var raw = NSString.stringWithString("http://example.com/MovieAPI/api/v1/movies/") 
var api_url = NSURL.URLWithString(raw) 
let jsonData: NSData = NSData.dataWithContentsOfURL(api_url, options: nil, error: &error) 
let result = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) 
as NSDictionary 
for val in result { 
    for (var i=0; i < val.value.count; i++){ 
     //println(val.value.valueAtIndex(3)) Not Working 
    } 
} 

i struktura mojego JSON jest

{ 
    data: [ 
     { 
     id: 2, 
     title: "Hunger Games", 
     cover: "http://example.com", 
     genre: 2 
     } 
    ] 
} 

Pomoc!

+0

Cóż, już przeszedł przez ten link, a rozwiązanie tego linku dało mi wartość zwrotną NIL i błąd ** Typ nie jest zgodny z sekwencją protokołu ** – Mahi008

+1

Więc zadałeś złe pytanie. Ponownie go otworzyłem. Przypuszczalny duplikat to [Iterowanie przez słownik w Swift] (http://stackoverflow.com/questions/24111627/iterating-through-a-dictionary-in-swift) –

Odpowiedz

39

Oto w jaki sposób można przetworzyć dany JSON:

let dataArray = result["data"] as NSArray; 

print("Data items count: \(dataArray.count)") 

for item in dataArray { // loop through data items 
    let obj = item as NSDictionary 
    for (key, value) in obj { 
     print("Property: \"\(key as String)\"") 
    } 
} 

Uwagi:

Pamiętaj, że pojawi przeanalizowane obiektów jak NSDictionary a kiedy iterację słownika, kolejność, w jakiej się pojawić właściwości mogą się różnić od kolejności w oryginalnym JSON.

+0

Dzięki! to działa! i jeszcze jedno pytanie, czy ta deklaracja ma rację? Niech wynik = NSJSONSerialization.JSONObjectWithData (jsonData, opcje: nil, error: & error) jako NSDictionary, ponieważ tworzy wyciek pamięci – Mahi008

+0

Co powoduje wyciek danych 'jsonData' lub' result'? – Keenle

+0

To wyciek na "wynik" w ten sposób [obraz] (http://i58.tinypic.com/2vsql50.jpg). – Mahi008

3

Sprawdź ten kawałek kodu dla odniesienia:

// MARK: - Firebase 
func retrieveData(){ 
    ref.observe(FIRDataEventType.value, with: { (snapshot) in 
     let postDict = snapshot.value as! [String : AnyObject] 
     let contactList = postDict["contacts"]! 
     let user = FIRAuth.auth()!.currentUser 

     let contactArray = contactList[user!.uid]! as! NSDictionary 

     for (key,_) in contactArray { 

      let contact:NSObject = contactArray[key] as! NSObject 
      let firstName:String! = contact.value(forKey: "firstName") as? String 
      let lastName:String! = contact.value(forKey: "lastName") as? String 
      let company:String! = contact.value(forKey: "company") as? String 
      let phone:String! = contact.value(forKey: "phone") as? String 
      let email:String! = contact.value(forKey: "email") as? String 

      print(contact.value(forKey: "firstName")!) 
      contacts.append(Contact(firstName:firstName, lastName: lastName, company: company, phone: phone, email: email)) 
     } 
     self.tableView.reloadData() 

    }) 

} 

specjalnie robi to trudne, jeśli przeanalizować kluczową wartość w użytkowej obiektu, który jest gdzie NSObject przychodzi do ratowania, dzięki czemu można uzyskać wartości dla klucza .

Powiązane problemy