Joe Scotto
Joe Scotto

Reputation: 10877

Alamofire can't access keys of json response

I'm new to using Alamofire and have encountered an issue. I'm able to run the following code to print out all the data from an API endpoint.

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
    if let JSON = response.result.value {
        print(JSON)
    }
}

The issue is that when I run this:

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
    if let JSON = response.result.value {
        print(JSON["firstkey"])
    }
}

I get the error:

Type 'Any' has no subscript members

I don't know why this error is happening, it seems as if I'm accessing the data correctly. Any help would be great, thanks!

I have tried formatting it using both:

print(JSON["firstkey"] as String)

and

print(JSON["firstkey"] as [String:Any]

but they still give the same error.

This is the JSON on my endpoint:

{
    "firstkey":"it worked!",
    "secondkey":["item1", "item2", "item3"]
}

Upvotes: 0

Views: 1331

Answers (3)

Swym App
Swym App

Reputation: 1

You should add ! at the end of code before ) to force unwrap the value

   Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
      if let JSON = response.result.value {
      let json = JSON as! [String: Any]
      print(json["firstkey"]!)
   }
}

Upvotes: 0

Arash Tabrizian
Arash Tabrizian

Reputation: 146

This is really simple. You just need to force cast (as!) your JSON. so change your code to this and it will work:

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
    if let JSON = response.result.value {
        let json = JSON as! [String: Any]
        print(json["firstkey"])
    }
}

Edit 1: As you said in comments that you are using SwiftyJSON package. Sample code is as follows:

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
        if let value = response.result.value {
            let json = JSON(value)
            print(json["firstkey"].stringValue)
        }
    }

Alamofire.request("https://mmcalc.com/api").responseJSON { response in
        if let value = response.result.value {
            let json = JSON(value)
            print(json.arrayValue[0]["uniqueUsers"].stringValue)
        }
    }

Upvotes: 1

Zohaib Hassan
Zohaib Hassan

Reputation: 984

You are trying to get the value with getting the object, try this:

Alamofire.request("http://codewithchris.com/code/afsample.json").responseJSON { response in
if let result = response.result.value {
    let JSON = result as! NSDictionary
    print(JSON["firstkey"])
}
}

Hope it will work!

Upvotes: 0

Related Questions