简体   繁体   中英

JSON Parsing error in Swift 3

I'd like to parse the following retrieved data using Swift 3.

{"station":"Brooklyn Bridge","heights":[{"dt":1485865800,"date":"2017-01-31T12:30+0000","height":0.130},{"dt":1485867600,"date":"2017-01-31T13:00+0000","height":0.318},{"dt":1485869400,"date":"2017-01-31T13:30+0000","height":0.472},{"dt":1485871200,"date":"2017-01-31T14:00+0000","height":0.586},{"dt":1485873000,"date":"2017-01-31T14:30+0000","height":0.658},{"dt":1485874800,"date":"2017-01-31T15:00+0000","height":0.693},{"dt":1485876600,"date":"2017-01-31T15:30+0000","height":0.696},{"dt":1485878400,"date":"2017-01-31T16:00+0000","height":0.672},{"dt":1485880200,"date":"2017-01-31T16:30+0000","height":0.619},{"dt":1485882000,"date":"2017-01-31T17:00+0000","height":0.525},{"dt":1485883800,"date":"2017-01-31T17:30+0000","height":0.379},{"dt":1485885600,"date":"2017-01-31T18:00+0000","height":0.179},{"dt":1485887400,"date":"2017-01-31T18:30+0000","height":-0.058},{"dt":1485889200,"date":"2017-01-31T19:00+0000","height":-0.300},{"dt":1485891000,"date":"2017-01-31T19:30+0000","height":-0.515},{"dt":1485892800,"date":"2017-01-31T20:00+0000","height":-0.681},{"dt":1485894600,"date":"2017-01-31T20:30+0000","height":-0.797},{"dt":1485896400,"date":"2017-01-31T21:00+0000","height":-0.870},{"dt":1485898200,"date":"2017-01-31T21:30+0000","height":-0.907},{"dt":1485900000,"date":"2017-01-31T22:00+0000","height":-0.906},{"dt":1485901800,"date":"2017-01-31T22:30+0000","height":-0.859},{"dt":1485903600,"date":"2017-01-31T23:00+0000","height":-0.757},{"dt":1485905400,"date":"2017-01-31T23:30+0000","height":-0.604},{"dt":1485907200,"date":"2017-02-01T00:00+0000","height":-0.414},{"dt":1485909000,"date":"2017-02-01T00:30+0000","height":-0.208},{"dt":1485910800,"date":"2017-02-01T01:00+0000","height":-0.007},{"dt":1485912600,"date":"2017-02-01T01:30+0000","height":0.174},{"dt":1485914400,"date":"2017-02-01T02:00+0000","height":0.324},{"dt":1485916200,"date":"2017-02-01T02:30+0000","height":0.437},{"dt":1485918000,"date":"2017-02-01T03:00+0000","height":0.510},{"dt":1485919800,"date":"2017-02-01T03:30+0000","height":0.548},{"dt":1485921600,"date":"2017-02-01T04:00+0000","height":0.558},{"dt":1485923400,"date":"2017-02-01T04:30+0000","height":0.544},{"dt":1485925200,"date":"2017-02-01T05:00+0000","height":0.501},{"dt":1485927000,"date":"2017-02-01T05:30+0000","height":0.416},{"dt":1485928800,"date":"2017-02-01T06:00+0000","height":0.277},{"dt":1485930600,"date":"2017-02-01T06:30+0000","height":0.087},{"dt":1485932400,"date":"2017-02-01T07:00+0000","height":-0.135},{"dt":1485934200,"date":"2017-02-01T07:30+0000","height":-0.355},{"dt":1485936000,"date":"2017-02-01T08:00+0000","height":-0.539},{"dt":1485937800,"date":"2017-02-01T08:30+0000","height":-0.671},{"dt":1485939600,"date":"2017-02-01T09:00+0000","height":-0.751},{"dt":1485941400,"date":"2017-02-01T09:30+0000","height":-0.791},{"dt":1485943200,"date":"2017-02-01T10:00+0000","height":-0.799},{"dt":1485945000,"date":"2017-02-01T10:30+0000","height":-0.774},{"dt":1485946800,"date":"2017-02-01T11:00+0000","height":-0.706},{"dt":1485948600,"date":"2017-02-01T11:30+0000","height":-0.590},{"dt":1485950400,"date":"2017-02-01T12:00+0000","height":-0.428},{"dt":1485952200,"date":"2017-02-01T12:30+0000","height":-0.234},{"dt":1485954000,"date":"2017-02-01T13:00+0000","height":-0.028},{"dt":1485955800,"date":"2017-02-01T13:30+0000","height":0.170},{"dt":1485957600,"date":"2017-02-01T14:00+0000","height":0.344},{"dt":1485959400,"date":"2017-02-01T14:30+0000","height":0.483},{"dt":1485961200,"date":"2017-02-01T15:00+0000","height":0.581},{"dt":1485963000,"date":"2017-02-01T15:30+0000","height":0.638},{"dt":1485964800,"date":"2017-02-01T16:00+0000","height":0.659},{"dt":1485966600,"date":"2017-02-01T16:30+0000","height":0.652},{"dt":1485968400,"date":"2017-02-01T17:00+0000","height":0.619},{"dt":1485970200,"date":"2017-02-01T17:30+0000","height":0.552},{"dt":1485972000,"date":"2017-02-01T18:00+0000","height":0.440},{"dt":1485973800,"date":"2017-02-01T18:30+0000","height":0.271},{"dt":1485975600,"date":"2017-02-01T19:00+0000","height":0.052},{"dt":1485977400,"date":"2017-02-01T19:30+0000","height":-0.191},{"dt":1485979200,"date":"2017-02-01T20:00+0000","height":-0.423},{"dt":1485981000,"date":"2017-02-01T20:30+0000","height":-0.612},{"dt":1485982800,"date":"2017-02-01T21:00+0000","height":-0.744},{"dt":1485984600,"date":"2017-02-01T21:30+0000","height":-0.824},{"dt":1485986400,"date":"2017-02-01T22:00+0000","height":-0.867},{"dt":1485988200,"date":"2017-02-01T22:30+0000","height":-0.880},{"dt":1485990000,"date":"2017-02-01T23:00+0000","height":-0.862},{"dt":1485991800,"date":"2017-02-01T23:30+0000","height":-0.800},{"dt":1485993600,"date":"2017-02-02T00:00+0000","height":-0.689},{"dt":1485995400,"date":"2017-02-02T00:30+0000","height":-0.529},{"dt":1485997200,"date":"2017-02-02T01:00+0000","height":-0.337},{"dt":1485999000,"date":"2017-02-02T01:30+0000","height":-0.131},{"dt":1486000800,"date":"2017-02-02T02:00+0000","height":0.068},{"dt":1486002600,"date":"2017-02-02T02:30+0000","height":0.244},{"dt":1486004400,"date":"2017-02-02T03:00+0000","height":0.387},{"dt":1486006200,"date":"2017-02-02T03:30+0000","height":0.490},{"dt":1486008000,"date":"2017-02-02T04:00+0000","height":0.555},{"dt":1486009800,"date":"2017-02-02T04:30+0000","height":0.587},{"dt":1486011600,"date":"2017-02-02T05:00+0000","height":0.593},{"dt":1486013400,"date":"2017-02-02T05:30+0000","height":0.572},{"dt":1486015200,"date":"2017-02-02T06:00+0000","height":0.516},{"dt":1486017000,"date":"2017-02-02T06:30+0000","height":0.411},{"dt":1486018800,"date":"2017-02-02T07:00+0000","height":0.249},{"dt":1486020600,"date":"2017-02-02T07:30+0000","height":0.041},{"dt":1486022400,"date":"2017-02-02T08:00+0000","height":-0.185},{"dt":1486024200,"date":"2017-02-02T08:30+0000","height":-0.391},{"dt":1486026000,"date":"2017-02-02T09:00+0000","height":-0.551},{"dt":1486027800,"date":"2017-02-02T09:30+0000","height":-0.655},{"dt":1486029600,"date":"2017-02-02T10:00+0000","height":-0.715},{"dt":1486031400,"date":"2017-02-02T10:30+0000","height":-0.745},{"dt":1486033200,"date":"2017-02-02T11:00+0000","height":-0.753},{"dt":1486035000,"date":"2017-02-02T11:30+0000","height":-0.733},{"dt":1486036800,"date":"2017-02-02T12:00+0000","height":-0.672},{"dt":1486038600,"date":"2017-02-02T12:30+0000","height":-0.561}]}

Specifically, I'd like to get every instances of "dt" and "date".

I've got the following code:

{
      let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:Any]
      let currentdt = parsedData["dt"] as! [String:Any]

      print(currentdt)

      let currentDate = currentdt["date"] as! Double
      print(currentDate)
    } catch let error as NSError {
      print(error)
    }

That yields the following error:

fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)

Any pointers as to what I'm doing wrong?

Basically never forced unwrap optionals unless they are 100% guaranteed to have a value, it's highly recommended to use optional bindings when loading JSON data over the internet.

JSON is pretty easy to read, {} represents a dictionary, [] an array.

dt and date are in an array of dictionaries for key heights

typealias JSONDictionary = [String:Any]

do {
   if let parsedData = try JSONSerialization.jsonObject(with: data!, options: []) as? JSONDictionary,
      let heights = parsedData["heights"] as? [JSONDictionary] {
         for height in heights {
             print(height["dt"] as? Int ?? "0")
             print(height["date"] as? String ?? "n/a")
         }
   }
} catch {
  print(error)
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM