2016-10-11 3 views
1

Ich habe Probleme beim Parsen des JSON Ich komme zurück von der Wiki-API.AlamoFire 4.0 + SwiftyJSON Ausgepackt tief verschachtelt JSON

Podfile:

platform :ios, ’10.0’ 
 

 
inhibit_all_warnings! 
 
use_frameworks! 
 

 
target 'GemFinder' do 
 

 
    pod 'Alamofire', '~> 4.0’ 
 
    pod 'SwiftyJSON', :git => 'https://github.com/appsailor/SwiftyJSON.git', :branch => 'swift3' 
 

 
end

Swift Code:

import UIKit 
 
import Alamofire 
 
import SwiftyJSON 
 

 
class WikiAPI: NSObject { 
 
    
 
    func MineralRequest(minID: (String)) { 
 
     
 
     Alamofire.request("https://en.wikipedia.org/w/api.php?action=query&titles=\(minID)&exintro=1&prop=pageimages%7Cextracts&format=json&pithumbsize=300", parameters: ["query": "pages"]).responseJSON { response in 
 
      
 
      if let values = response.result.value as? [String: AnyObject] { 
 
       
 
       let json = JSON(values) 
 
       
 
       // Returns null 
 
       print("otherJSON: \(json["query"]["pages"][0]["extract"])") 
 
       
 
       
 
       let JSONvalues = values as NSDictionary 
 
       print("JSONvalues: \(JSONvalues)") 
 

 
       // This is also working to retrieve everything from below "query" 
 
       let parse = JSONvalues.object(forKey: "query") 
 
       print("Parse: \(parse)") 
 
       
 
       let queryValues = values["query"] 
 
       
 
       // Returns nested "pages" object, but I need to go deeper. 
 
       print("queryvalues: \(queryValues?["pages"])") 
 
       
 
      } 
 
     } 
 
    } 
 
}

Ich bin in der Lage, eine Antwort zu bekommen, natürlich, und zu versuchen, geh tiefer, aber ich bekomme immer Nullwerte, wenn ich versuche auszupacken.

Was fehlt mir? Hier ist ein Bild des Baumes. Ich versuche Titel, Bilder und den Auszug herauszuziehen.

JSON response preview

Nach diesem Format, wie hier zu sehen, ergibt sich immer noch Null-Werte. Parameter schien nicht zu profitieren entweder: How do I access a nested JSON value using Alamofire and SwiftyJSON?

Antwort

1

„Seiten“ Wert ist ein Wörterbuch so [0] auf sie verwenden wird nicht funktionieren, müssen Sie stattdessen den Schlüssel verwenden:

print("otherJSON: \(json["query"]["pages"]["1895477"]["extract"])") 

Oder, wenn es viele Elemente in Seiten und Sie wollen sie alle, die Sie durchlaufen können wie:

let pages = json["query"]["pages"] 
for (_,page) in pages { 
    print(page["extract"]) 
} 
+0

Vielen Dank! Das war die richtige Antwort. – softdownfeathers

+0

Der erste Teil funktioniert, aber nach mehr Untersuchung, bemerkte ich, dass pages.values ​​einen Fehler wirft. Sagt, dass JSON keine Mitglied "Werte" hat. Könnte es einen anderen Weg geben, dies zu tun, ohne den JSON in etwas anderes zu konvertieren? – softdownfeathers

+0

@softdownfeathers Gern geschehen :) Ich habe die Antwort mit der korrekten Loop-Syntax für SwiftyJSON aktualisiert. –

Verwandte Themen