NSJSONSerialization unboxes NSNumber?

时间:2013-02-19 13:57:01

标签: ios json nsjsonserialization

我正在使用NSJSONSerializationJSON文档转换为Core Foundation类型。

我的JSON中有一个字段是“数字”。它有时是整数,有时是浮点数。

现在,问题是当NSJSONSerialization将我的JSON变成NSDictionary并尝试使用objectForKey提取数字时,有时它是一个int,有时它是一个double。似乎NSJSONSerialization并不是简单地将其保留在NSNumber包装器中,而是实际取消对该值的设置,并将 插入NSDictionary

很奇怪。我以为你应该把原语放到NSDictionary。所以我现在遇到的问题是我不知道应该转换为什么类型(int或double)以保留实际的数值。

任何人都知道出路吗?

2 个答案:

答案 0 :(得分:3)

你可以从NSNumber获得原始类型。只需使用以下代码段:

    const char* type = [theValue objCType];
if (strcmp (type, @encode (NSInteger)) == 0) {
    //It is NSInteger
} else if (strcmp (type, @encode (NSUInteger)) == 0) {
    //It is NSInteger
} else if (strcmp (type, @encode (int)) == 0) {
    //It is NSUInteger
} else if (strcmp (type, @encode (float)) == 0) {
    //It is float
} else if (strcmp (type, @encode (double)) == 0) {
    //It is double
} else if (strcmp (type, @encode (long)) == 0) {
    //It is long
} else if (strcmp (type, @encode (long long)) == 0) {
    //It is long long
}

等等。

答案 1 :(得分:0)

事实证明他们一直都是NSNumbers,我只是缺乏调试经验。我只是困惑并认为它们是int和double值,因为这是调试器呈现它们的方式。所以它是拆箱的调试器,而不是NSJSONSerialization ......