从json字典中获取正确的类型值

时间:2014-01-31 10:17:36

标签: iphone objective-c json key-value-coding

在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吗?

1 个答案:

答案 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];

在此处查找完整列表:

CFNumber Ref

要检查它是否为NSString,请执行以下操作:

if([val isMemberOfClass:[NSString class]])
{
}