在objectivec中有一种方法可以从json字典中获取精确值类型吗?
例如,考虑一下这个json:
{
"ret": 0,
"state": "Italy",
"lat": 45.46347,
"lon": 9.19404
}
我希望得到INT
" ret ",NSString
值" 州 "和FLOAT
值" lat "和" lon "。
我正在使用此代码段:
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"sampleJson.json"]];
NSDictionary *dict = [ NSJSONSerialization JSONObjectWithData:data options:0 error:nil ];
id val = [ dict valueForKeyPath:@"lat" ][0];
NSLog(@"%@", [val class] );
但很明显,输出是通用的NSNumber
。
2014-01-31 11:13:51.903 Test0002 [2044:70b] __NSCFNumber
可以自动获得float
代替NSNumber
吗?
答案 0 :(得分:1)
要检查NSNumber是浮点还是整数,可以使用以下方法:
if ([val isMemberOfClass:[NSNumber class]])
{
switch(CFNumberGetType((CFNumberRef((NSNumber)val))
{
/* List of results:
kCFNumberSInt8Type
kCFNumberSInt16Type
kCFNumberSInt32Type
kCFNumberSInt64Type
kCFNumberFloat32Type
kCFNumberFloat64Type
kCFNumberCharType
etc... */
}
}
找到类型后,只需使用:
float f = [((NSNumber)val) floatValue];
或
int i =[((NSNumber)val) intValue];
在此处查找完整列表:
要检查它是否为NSString,请执行以下操作:
if([val isMemberOfClass:[NSString class]])
{
}