我正在使用NSJSONSerialization
将JSON
文档转换为Core Foundation类型。
我的JSON
中有一个字段是“数字”。它有时是整数,有时是浮点数。
现在,问题是当NSJSONSerialization
将我的JSON
变成NSDictionary
并尝试使用objectForKey提取数字时,有时它是一个int,有时它是一个double。似乎NSJSONSerialization
并不是简单地将其保留在NSNumber
包装器中,而是实际取消对该值的设置,并将 插入NSDictionary
。
很奇怪。我以为你应该把原语放到NSDictionary
。所以我现在遇到的问题是我不知道应该转换为什么类型(int或double)以保留实际的数值。
任何人都知道出路吗?
答案 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 ......