I am using JSONSerialization
quite often in my project. Here is an example of my JSONSerialization
code:
let json = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: Any]
Note: Options are missing for purpose and I normally have them in my project.
My problem is that I am not pretty sure what do these options: []
do?
What I have found about options:
NSJSONReadingMutableContainers:
Specifies that arrays and dictionaries are created as mutable objects.
NSJSONReadingMutableLeaves:
Specifies that leaf strings in the JSON object graph are created as instances of NSMutableString.
NSJSONReadingAllowFragments:
Specifies that the parser should allow top-level objects that are not an instance of NSArray or NSDictionary.
Note2: I found those definitions on : https://developer.apple.com/reference/foundation/nsjsonreadingoptions
My question is: Can someone please explain me differences between those options , what should I use them for and if you could show me some code example of those options it would be perfect :).
Any help appreciated.
Thanks.
Short answer for the first two options:
Ignore them in Swift!
In Swift you can make objects mutable just with the var
keyword.
In Objective-C on the other hand you need the options to make the collection types
NSArray
/ NSDictionary
mutable -> NSMutableArray
/ NSMutableDictionary
with the NSJSONReadingMutableContainers
option or the value strings -> NSMutableString
with NSJSONReadingMutableLeaves
.
In both Objective-C and Swift if you are only reading the JSON you don't need mutability at all.
NSJSONReadingAllowFragments
is important if the root object of the received JSON is not an array or a dictionary. If it is an array or dictionary you can omit that option, too.
The pair of empty brackets []
represents No options
(options
can be omitted in Swift 3).