https://github.com/YouXianMing

NSJSONSerialization能够处理的JSONData

NSJSONSerialization能够处理的JSONData

You use the NSJSONSerialization class to convert JSON to Foundation objects and convert Foundation objects to JSON.

你用NSJSONSerialization这个类来将JSON数据转换成Foundation对象或者将Foundation对象转换成JSON数据。

An object that may be converted to JSON must have the following properties:

一个能被转换成JSON数据的对象必须具备以下的特性:

  • The top level object is an NSArray or NSDictionary. 
  • All objects are instances of NSString, NSNumber, NSArray, NSDictionary, or NSNull. 
  • All dictionary keys are instances of NSString. 
  • Numbers are not NaN or infinity.
  • 最顶层的对象必须是NSArray或者NSDictionary
  • 所有的实例对象必须是NSString、NSNumber、NSArray、NSDictionary或者NSNull
  • 所有字典中的键值必须是NSString
  • Numbers必须是有意义的(不能是无穷大)

提供测试使用的源码:

NSDictionary+JSON.h 与 NSDictionary+JSON.m

//
//  NSDictionary+JSON.h
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSDictionary (JSON)

// 转换成JSONString
- (NSString *)toJSONString;

// 转换成JSONData
- (NSData *)toJSONData;

@end
//
//  NSDictionary+JSON.m
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSDictionary+JSON.h"

@implementation NSDictionary (JSON)

- (NSString *)toJSONString
{
    NSData *data = [NSJSONSerialization dataWithJSONObject:self
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:nil];
    
    if (data == nil)
    {
        return nil;
    }
    
    NSString *string = [[NSString alloc] initWithData:data
                                             encoding:NSUTF8StringEncoding];
    return string;
}

- (NSData *)toJSONData
{
    NSData *data = [NSJSONSerialization dataWithJSONObject:self
                                                   options:NSJSONWritingPrettyPrinted
                                                     error:nil];
    
    return data;
}

@end

NSData+JSON.h 与 NSData+JSON.m

//
//  NSData+JSON.h
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSData (JSON)

// 转换成集合
- (id)toPropertyList;

@end
//
//  NSData+JSON.m
//  Category
//
//  Created by YouXianMing on 14-8-28.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "NSData+JSON.h"

@implementation NSData (JSON)

- (id)toPropertyList
{
    return [NSJSONSerialization JSONObjectWithData:self
                                           options:NSJSONReadingMutableLeaves
                                             error:nil];
}

@end

使用时的源码:

//
//  ViewController.m
//  JSON
//
//  Created by YouXianMing on 14-10-8.
//  Copyright (c) 2014年 YouXianMing. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
 
    // 组织JSON数据
    NSDictionary *jsonDic = \
    @{
    @"name"          : @"YouXianMing",                             // NSString
    @"age"           : @26,                                        // NSNumber
    @"BWH"           : @[@1, @1, @1],                              // NSArray
    @"address"       : @{@"BeiJin": @"XXXX", @"XianNing":@"YYYY"}, // NSDictionary
    @"HasGirlFriend" : [NSNull null]                               // NSNull
    };
    
    // 转换成JSONData
    NSData *jsonData = [jsonDic toJSONData];
    
    // 将JSONData转换成list
    NSLog(@"%@", [jsonData toPropertyList]);
}

@end

以下是要点:

还有一点需要注意:

所有的数字相关的类型都会被转换成NSNumber,无论是布尔值还是浮点值还是整型值,都会被转换成NSNumber。

 

posted @ 2014-10-08 20:42  YouXianMing  阅读(682)  评论(0编辑  收藏  举报