
『导言』
在iOS开发解析数据或者数据转换时候,经常遇到序列化
与反序列化
。下载:JSON与OC转化demo
-
反序列化:
💖JSON
数据 ---->OC
对象
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
- 例如:
// 例如:str = @“\"wendingding"”;
// 1) 既不是数组arr, 也不是字典dic ;
// 2)options用NSJSONReadingAllowFragments
// 3)一般用 0 或者 KNillOptions
NSString *str = @"\"MeiNvJuanJuan\"";
id obj = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];//传0 或者 kNilOptions
NSLog(@"%@\n%@",[obj class],obj);
- 打印结果:
data--->str
2017-03-10 17:24:08.923 01-掌握JSON-解析-zwj[1553:187861] __NSCFString
MeiNvJuanJuan
-
序列化
💖OC
对象 -------> JSON
数据
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
- 注意:
并不是所有的OC对象可以转换为JSON。例如字符串 。例如: NSString *strM = @"zhaowenjuan";
OC->JSON: 同时满足以下条件:
- 最外层为数组或者字典 NSArray or NSDictionary
- 所有元素为这些类型 NSString, NSNumber, NSArray, NSDictionary, or NSNull
- 所有的key必须是类型 NSStrings
- 所有NSNumbers 不能是无穷大
- 例如:
NSDictionary *dicM = @{
@"name":@"zwj",
@"age":@3//@3表示数据对象
};
NSArray *arrM = @[@"123",@"345"];
//注意:并不是所有的OC对象可以转换为JSON。例如字符串
NSString *strM = @"zhaowenjuan";
BOOL isValid = [NSJSONSerialization isValidJSONObject:strM];
if (! isValid) {
NSLog(@"%zd",isValid);
return;
}
/*
+ (BOOL)isValidJSONObject:(id)obj;
同时满足以下:
- 最外层为数组或者字典 NSArray or NSDictionary
- 所有元素为这些类型 NSString, NSNumber, NSArray, NSDictionary, or NSNull
- 所有的key必须是类型 NSStrings
- 所有NSNumbers 不能是无穷大
*/
/*
OC---->JSON
参数1 要转换的OC对象
参数2 选项NSJSONWritingPrettyPrinted 美观
参数3
*/
NSData *data = [NSJSONSerialization dataWithJSONObject:strM options:NSJSONWritingPrettyPrinted error:nil];//NSJSONWritingPrettyPrinted kNilOptions
NSLog(@"json -- %@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
/*
2017-03-13 13:38:44.768 01-掌握JSON-解析-zwj[1222:147729] json -- {
"name" : "zwj",
"age" : 3
}
2017-03-13 13:40:02.290 01-掌握JSON-解析-zwj[1237:148840] json -- [
"123",
"345"
]
*/
网友评论