MD Blog

誰かの何かに役に立てることを書いていきたいです

JSONObjectWithData:options:error: のオプションの意味

iOS 5から標準ライブラリとしてNSJSONSerializationクラスができました。
このクラスにはクラスメソッドが5つあり、このうち JSONObjectWithData:options:error: と dataWithJSONObject:options:error: を使えば、簡単に JSON <-> NSArray or NSDictionary の変換を行うことができます。

NSJSONSerialization Class Reference


さて、JSON から NSArray or NSDictionary への変換には JSONObjectWithData:options:error: を使うわけですが、これには以下のオプションを指定できます。
リファレンスを見たり実際にコードを書いて試したりしてわかったことを書きます。


NSJSONReadingMutableContainers
これを指定すると、NSArrayやNSDictionaryの代わりに、可変オブジェクトであるNSMutableArrayやNSMutableDictionaryを返してくれます。

NSJSONReadingMutableLeaves
LeavesとはLeaf(葉っぱ)の複数形ですね。つまり、JSONデータの葉にあたる末端のオブジェクトを可変オブジェクトとして返してくれます。
すなわちNSStringがNSMutableStringとして返ってきます。
通常、数値や真偽値はNSNumber(のサブクラス)として返ってきますが、NSNumberには可変オブジェクトがないので変化はないようです。

NSJSONReadingAllowFragments
直訳すると「断片化を許容する」になりますが、いまいち意味を掴みにくかったです。
単純に言うと、JSONのルートがobjectやarrayではなかったとしても(数値、真偽値、文字列)、オブジェクトを返してくれるオプションです。
このオプションを指定していないと、ルートがobject,array以外の場合はnilが返ります。


ちなみに、オプションなので | で区切れば複数組み合わせて指定できます。