NSJSONSerialization详解

楚乐逸
2023-12-01

可以使用NSJSONSerialization来解析JSON对象。

一个对象想要被转换成JSON的对象必须具有以下特点:

1.顶层对象是NSArray或者NSDictionary;

2.其中的对象实例NSString, NSNumber, NSArray, NSDictionary, 或者 NSNull;

3.所有字典的键都需要是NSArray类型的;

4.数字不是NaN或者无穷大。


创建JSON对象:

1.返回一个JSON数据对象:

+ (id)JSONObjectWithData:(NSData *)data
                 options:(NSJSONReadingOptions)opt
                   error:(NSError **)error
options是用于读取JSON数据和创建的对象的选项。具体详见NSJSONReadingOptions。

enum {
   NSJSONReadingMutableContainers = (1UL << 0),
   NSJSONReadingMutableLeaves = (1UL << 1),
   NSJSONReadingAllowFragments = (1UL << 2)
};
typedef NSUInteger NSJSONReadingOptions;
NSJSONReadingMutableContainers:返回可变容器,NSMutableDictionary或NSMutableArray。  
 
NSJSONReadingMutableLeaves:返回的JSON对象中字符串的值为NSMutableString,目前在iOS 7上测试不好用,应该是个bug,参见:  
http://stackoverflow.com/questions/19345864/nsjsonreadingmutableleaves-option-is-not-working  
 
NSJSONReadingAllowFragments:允许JSON字符串最外层既不是NSArray也不是NSDictionary,但必须是有效的JSON Fragment。例如使用这个选项可以解析 @“123” 这样的字符串。参见:  
http://stackoverflow.com/questions/16961025/nsjsonserialization-nsjsonreadingallowfragments-reading 


2.使用文件流的形式来解析json:

+ (id)JSONObjectWithStream:(NSInputStream *)stream
                   options:(NSJSONReadingOptions)opt
                     error:(NSError **)error


创建JSON数据:

3.将Foundation对象转换为JSON对象:

+ (NSData *)dataWithJSONObject:(id)obj
                       options:(NSJSONWritingOptions)opt
                         error:(NSError **)error


4.往一个给定的流里写入JSON对象:
+ (NSInteger)writeJSONObject:(id)obj
                    toStream:(NSOutputStream *)stream
                     options:(NSJSONWritingOptions)opt
                       error:(NSError **)error

5. 返回一个布尔值 , 指示是否 一个给定的 对象可以 被转换成 JSON数据:

+ (BOOL)isValidJSONObject:(id)obj



 类似资料: