My App is supposed to go to a specific location to pull down the website it needs to load. In 2.3 it worked like a charm, but since I've updated xcode (which I don't have a ton of experience in) it is giving me the error "type 'Any' has no subscript members" and highlighting the "json" right before line three
...Retriever = json["WEB"]...
this is the code related to it.
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) if let Retriever = json["WEB"] as? [[String: AnyObject]] { for website in Retriever { if let name = website["URL"] as? String { self.loadAddressURL(name)
I feel like I am missing something small. If there is a better way to do this, I would love suggestions. The URL returns this JSON
{ "WEB" : [ { "URL" : "http://www.google.com" } ] }
but I would love it if I could simplify it to just
{"URL":"http://www.google.com"}
Try this:
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]
Safe way:
do { if let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [String:Any] { print(json) } } catch let err{ print(err.localizedDescription) }
You have to cast type Any
to Swift dictionary type [String:AnyObject]
.
Edit: Swift 3
In swift 3 the purpose of AnyObject
is more clarified. So more favourable Swift Dictionary type will be [String:Any]
.
Any
is an alias for any data type.AnyObject
is an alias for any data type derived from a class.
For more info visit: https://craiggrummitt.com/2016/09/16/any-vs-anyobject-vs-nsobject-in-swift-3/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With