這幾天一直有點(diǎn)疑惑NSJSONSerialization dataWithJSONObject:options:errer:
方法客蹋,為什么疑惑?
因?yàn)镴SON的格式是這樣的:
{
"name":"李小龍",
"age":14
}
但是上邊的確實(shí)NSDate和Objective-C的對象的轉(zhuǎn)化,所以就蒙了;我一直以為是JSON和Objective-C的對象的轉(zhuǎn)化丢郊,結(jié)果我理解錯誤了盔沫;
幾天和朋友一說,給了我一個源碼枫匾,才一看架诞,原來我們使用的NSJSONSerialization
兩個類方法都是NSDate和Objective-C的對象的轉(zhuǎn)化~~~
結(jié)論:蘋果給的NSJSONSerialization
這個命名沒有那個準(zhǔn)確不知道這麼說,會不會挨噴
那么JSON和OC對象的轉(zhuǎn)化到底是個什么順序那干茉?
JSON ---> NSDate ----> OC對象
JSON <--- NSDate <---- OC對象
我們使用NSJSONSerialization
兩個類方法谴忧,其實(shí)并不是JSON(我自己感覺哈),因?yàn)镹SDate和JSON之間還少一層等脂。
那么如何才能將OC對象和JSON字符串互相轉(zhuǎn)化那俏蛮?
// 字典轉(zhuǎn)換成Json字符串
NSDictionary * testDict = @{@"hid":@"1",
@"cut_price":@"2",
@"cut_num":@"3",
@"goods_id":@"4",
@"pool_id":@"5"};
NSError * error = nil;
NSData * jsonData = [NSJSONSerialization dataWithJSONObject:testDict options:NSJSONWritingPrettyPrinted error:&error];
NSString * jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
將JSON字符串和OC轉(zhuǎn)化
// 將json字符串轉(zhuǎn)換成字典
NSData * getJsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary * getDict = [NSJSONSerialization JSONObjectWithData:getJsonData options:NSJSONReadingMutableContainers error:&error];
序列化和反序列化
序列化:將JSON轉(zhuǎn)化成OC對象
反序列化:將OC對象轉(zhuǎn)化成JSON
AFNetworking 的 response中有AFJSONResponser對象,這個最后獲取的response就是一個轉(zhuǎn)化好的字典了上遥,可以直接使用搏屑,如果使用的是AFHTTPResponser那么獲取的實(shí)際是二進(jìn)制NDate,我們還是要通過JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error
轉(zhuǎn)化成字典才行~很麻煩粉楚;