NSJSONSSerialization JSONシーケンス化を実現
3484 ワード
簡単に述べる
iOS 5では,アップルがJSON列を解析するNSJSONSSerializationクラスを導入した.このクラスにより、JSONデータとNSDictionaryとNSArrayとの変換を完了できます.サードパーティ製ライブラリを別途使用する必要はありません.
一、NSDictionaryまたはNSArrayをJSON列に変換する
// JSON
- (NSData *)toJSONData:(id)theData{
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:theData
options:NSJSONWritingPrettyPrinted
error:&error];
if ([jsonData length] > 0 && error == nil){
return jsonData;
}else{
return nil;
}
// , JSON
NSString *jsonString = [[NSString alloc] initWithData:jsonData
encoding:NSUTF8StringEncoding];
}
シーケンス化関数の説明
/* Generate JSON data from a Foundation object. If the object will not produce valid JSON then an exception will be thrown. Setting the NSJSONWritingPrettyPrinted option will generate JSON with whitespace designed to make the output more readable. If that option is not set, the most compact possible JSON will be generated. If an error occurs, the error parameter will be set and the return value will be nil. The resulting data is a encoded in UTF-8.*/
+(nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
typedef NS_OPTIONS(NSUInteger, NSJSONWritingOptions) {
NSJSONWritingPrettyPrinted = (1UL << 0)
} NS_ENUM_AVAILABLE(10_7, 5_0);
二、JSON列をNSDictionaryまたはNSArrayに変換する
// NSString NSData
[jsonString dataUsingEncoding:NSASCIIStringEncoding];
// JSON
- (id)toArrayOrNSDictionary:(NSData *)jsonData{
NSError *error = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingAllowFragments
error:&error];
if (jsonObject != nil && error == nil){
return jsonObject;
}else{
//
return nil;
}
}
三、JSON列とNSArrayとNSDictionaryの操作をカプセル化する
もちろん、NSObjectとNSStringの分類で直接貼り付けることを定義する場合も多いです.
1.NSStringをNSArrayまたはNSDictionaryに変換する
#import "NSString+JSONCategories.h" // ------ category
@implementation NSString(JSONCategories)
-(id)JSONValue {
NSData* data = [self dataUsingEncoding:NSUTF8StringEncoding];
__autoreleasing NSError* error = nil;
id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
@end
2.NSArrayまたはNSDictionaryをNSStringに変換
#import "NSObject+JSONCategories.h"
@implementation NSObject (JSONCategories)
-(NSData*)JSONString {
NSError* error = nil;
id result = [NSJSONSerialization dataWithJSONObject:self
options:kNilOptions error:&error];
if (error != nil) return nil;
return result;
}
@end