2016-12-02 17 views
0

Ich neu bei Alamofire, ich habe einige API getestet. Ich bin auf Wechselkurse gestoßen. So ist die JSON-Datei ist wie dieseAlamofire 4.0 JSOn Parsing Swift

["base": CAD, "date": 2016-12-01, "rates": { 
AUD = "1.0097"; 
BGN = "1.3735"; 
BRL = "2.57"; 
CHF = "0.7559"; 
CNY = "5.1388"; 
CZK = "19.004"; 
DKK = "5.2248"; 
EUR = "0.70225"; 
GBP = "0.59058"; 
HKD = "5.7881"; 
HRK = "5.2985"; 
HUF = "220.48"; 
IDR = 10108; 
ILS = "2.8607"; 
INR = "51.009"; 
JPY = "85.246"; 
KRW = "871.9400000000001"; 
MXN = "15.403"; 
MYR = "3.331"; 
NOK = "6.2941"; 
NZD = "1.0539"; 
PHP = "37.102"; 
PLN = "3.1374"; 
RON = "3.1631"; 
RUB = "47.591"; 
SEK = "6.8775"; 
SGD = "1.0657"; 
THB = "26.616"; 
TRY = "2.6006"; 
USD = "0.7462800000000001"; 
ZAR = "10.504";}] 

typealias JSONStandard = [String: AnyObject] 

func parseData(JSONData:Data) { 
    do { 
     var readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as! JSONStandard 
     if let rates = readableJSON["rates"] as? JSONStandard{ 
      for i in 0..<rates.count { 
       let rate = rates[i] as! //Here 
      } 
      print(rates) 
     } 
     print(readableJSON) 

    } catch { 
     print(error) 
    } 
} 

Ich war in der Lage Seite „Preise“ zu bekommen, aber ich nicht, wie ich alle Daten innerhalb der „Raten“ analysieren würde. Ich dachte, ich müsste es in einem Wörterbuch speichern. sehr verwirrt Dank

+0

, dass nicht einmal ein gültiges Datenmenge ist. Es sollte das Semikolon nicht enthalten. –

+0

@ElTomato das ist eigentlich so wahr, das merke ich einfach. Aber ich bin sicher, dass es einen Weg gibt –

+0

Es gibt keinen Weg um ihn herum. Sie können Ihr JSON-Dataset natürlich manuell reparieren und es als Swift-Datei lesen. –

Antwort

0

Wie Sie es ist ein doppelter Wert in String sehen, so dass Sie ANYOBJECT in String konvertieren müssen zuerst, dann wandeln sie in Doppelt. Sie können es wie folgt aus (in Swift Spielplatz getestet):

import Foundation 

typealias JSONStandard = [String: AnyObject] 

func parseData(JSONData:Data) { 
    do { 
     guard let readableJSON = try JSONSerialization.jsonObject(with: JSONData, options: .mutableContainers) as? JSONStandard, 
      let ratesJSON = readableJSON["rates"] as? JSONStandard 
      else { return } 
     print("Readable JSON :") 
     print(readableJSON) 
     let rates = ratesJSON.flatMap({ (key, value) -> ([String: Double]) in 
      guard let value = value as? String, let convertedValue = Double(value) else { return [:] } 
      return [key: convertedValue] 
     }) 
     print("Rates :") 
     print(rates) 

    } catch { 
     print(error) 
    } 
} 

let jsonString = "{\"base\": \"CAD\", \"date\": \"2016-12-01\", \"rates\": { \"AUD\": \"1.0097\", \"BGN\": \"1.3735\", \"BRL\": \"2.57\"}}" 
let jsonData = jsonString.data(using: String.Encoding.utf8)! 
parseData(JSONData: jsonData) 

Ergebnis:

Readable JSON : 
["base": CAD, "date": 2016-12-01, "rates": { 
    AUD = "1.0097"; 
    BGN = "1.3735"; 
    BRL = "2.57"; 
}] 
Rates : 
[("BGN", 1.3734999999999999), ("AUD", 1.0097), ("BRL", 2.5699999999999998)] 
+0

Ist es möglich für Sie sagen Sie mir die Detailverwendung der Wache? –

+0

@ J.Kim1205 guard ist wie ein if, aber es wird nur prüfen, ob die Bedingung wahr ist oder nicht, es wird auch Bouncer-Muster genannt. So wird es funktionieren wie diese Guard-Bedingung else {// dein Code und return}, wenn die Bedingung wahr ist, wird es in die nächste Zeile gehen, wenn nicht geht es in else Block gibt es auch eine gute Erklärung hier -> http : //ercernsey.com/swift-guard-statement/ –

+0

jsonString.data? wo ist das von –

0

Sie haben es in ein Array von Doppel zu speichern:

var yourArray = [Double]() 

    for i in 0..<rates.count { 
     let rate = rates[i] as! Double 
     print(rate) 
     yourArray.append(rate) 
    } 

print(yourArray.description) 
+0

das bedeutet, krank sein nur speichern meine doppelte Werte, möchte ich meine Zeichenfolge zu speichern –