I'm currently downloading data from a server and I'm not sure how to get the response that I'm getting back into the format that's expected by the method that I'm working with. Could someone guide me on what I would need to do to get all of the items in the JSON response added into a [[String : AnyObject]] format?
Thank you in advance!!
JSON that I'm getting back
{
"Green Shirt": [
{
"id": "740",
"name": “Nice Green Shirt",
"quantity": "0",
"make": "",
"model": "",
"price": “15.00",
"size": "XXS",
"sku": null,
"image": "https:\/\/google.com\/green_shirt.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
},
{
"id": "743",
"name": "Green Shirt",
"quantity": “68",
"make": "",
"model": "",
"price": “20.00",
"size": "XS",
"sku": null,
"image": "https:\/\/google.com\/green_shirt.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
}
],
"Dark Blue Jeans": [
{
"id": "1588",
"name": "Dark Blue Jeans",
"quantity": "0",
"make": "",
"model": "",
"price": "0.00",
"size": “S",
"sku": null,
"image": "https:\/\/google.com\/dark_blue_jeans.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
"category": null
},
{
"id": "1559",
"name": "Dark Blue Jeans",
"quantity": "4",
"make": "",
"model": "",
"price": "0.00",
"size": “XL",
"sku": null,
"image": "https:\/\/google.com\/dark_blue_jeans.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
"category": null
}
],
"White Belt": [
{
"id": "1536",
"name": "White Belt",
"quantity": "37",
"make": "",
"model": "",
"price": "0.00",
"size": "One Size",
"sku": null,
"image": "https:\/\/google.com\/white_belt.jpg",
"new_record": false,
"category_name": "",
"bar_code": "",
"category": null
}
]
}
What i'm trying to do is take all the items in "Green Shirt", "Dark Blue Jeans" and "White Belt" and put them in this format [[String : AnyObject]]
// 1 - Make the HTTP Request
var endpoint = NSURL(string: "https://www.mycustomsite.com/get-inventory")
var data = NSData(contentsOfURL: endpoint!)
// 2 - Validate and Deserialize the response
if let json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: nil) as? NSDictionary {
}
The trick is to declare the right type for the cast.
For your data we are using
[String: [[String: AnyObject]]]
: a dictionary with a String as key and an array of dictionaries as value, these dictionaries have their value asAnyObject
because there's several possible types.After a successful decoding, we print the resulting dictionary (Result 1).
Then, as an example, we loop over the dictionaries contained in the array behind the key "Green Shirt", and display their ID and size.
And as a last example: get an array with all the clothes objects.
Result 1:
Example:
Array of all clothes:
Note that with our mapping, we can also easily create
allClothes
withflatMap
instead of making a loop:So, to conclude, here's our functions included in a class as an example of how you could use it.
Note that in this class example we've created a
typealias
for the type of our dictionary, it's more convenient to write and read.Swift 2 update