我在解析Web服务的json输出时遇到问题。我正在使用NSJSONSerialization将输出解析为NSDictionary。还通过子类化AFHTTPSessionManager使用AFNetworking。目前,响应序列化器是AFHTTPResponseSerializer,它返回NSData 这是我正在使用的代码:
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:&err];
非常简单。错误的对象是零,所以转换工作正常。
但是:我直接从网络服务获得的结果是:
"address":
{
"address1": "Ivy House",
"address2": "Sandy Lane",
"city": "Rush",
"postCode": null,
"email": "notknown@whatever.com",
"telephone": "18437584",
"mobile": null,
"smsAlert": null,
"county": "Dublin",
"country": "Ireland",
"websiteAddress": "www.example.com"
},
打印dict内容后得到的结果是:
address = {
address1 = "Ivy House";
address2 = "Sandy Lane";
city = Rush;
country = Ireland;
county = Dublin;
email = "notknown@whatever.com";
mobile = "<null>";
postCode = "<null>";
smsAlert = "<null>";
telephone = 18437584;
websiteAddress = "www.example.com";
};
问题是生成的NSDictionary没有双引号,所以将NSDictionary以plist格式保存到磁盘FAILS!
我也尝试过使用AFJSONResponseSerializer返回NSDictionary,但内容与上面相同!
这里的问题在哪里?
提前致谢。
答案 0 :(得分:2)
这里的问题似乎与双引号无关。打印时,NSDictionary
(以及其他Foundation对象)在不需要时会删除双引号(例如,当字符串中没有空格或特殊字符时)。
现在,阻止您将NSDictionary
序列化到属性列表的可能问题是JSON中存在nulls
,因此NSDictionary
中存在NSData
。根据{{3}}:
属性列表对象包括
NSString
,NSArray
,NSDictionary
,NSDate
,NSNumber
和nulls
个对象。
而来自JSON的NSNull
将被表示为NSDictionary
的实例,从而使您的{{1}}成为无效的属性列表。
答案 1 :(得分:1)
NSDictionary与JSON字符串有不同的结构。因此,当您将JSON字符串解析为NSDictionary时,您不应该期望引号。
您可以保存JSON数据并在运行时再次解析它。
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"yourfilename.dat"];
// Save it into file system
[data writeToFile:dataPath atomically:YES];