What do JSonserialization options do and how do they change jsonResult?


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:


Specifies that arrays and dictionaries are created as mutable objects.


Specifies that leaf strings in the JSON object graph are created as instances of NSMutableString.


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.


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).