我在JSON文件中有ID,其中一些非常大但是它们适合在unsigned long long int的范围内。
"id":9223372036854775807,
如何使用NSDictionary的objectForKey:idKey
从JSON获取这个大数字?
我可以使用NSDecimalNumber吗?其中一些ID适合常规整数。
答案 0 :(得分:3)
棘手。 Apple的JSON代码将高于10 ^ 18的整数转换为NSDecimalNumber,将较小的整数转换为包含64位整数值的纯NSNumber。现在你可能希望unsignedLongLongValue会给你一个64位的值,但它不适用于NSDecimalNumber:NSDecimalNumber首先转换为double,结果转换为unsigned long long,这样你就失去了精度。
您可以添加一些内容作为NSNumber的扩展。这有点棘手,因为如果你得到一个非常接近2 ^ 64的值,将它转换为double可能会四舍五入到2 ^ 64,这不能转换为64位。所以我们需要先除以10,以确保结果不是太大。
- (uint64_t)unsigned64bitValue
{
if ([self isKindOfClass:[NSDecimalNumber class]])
{
NSDecimalNumber* asDecimal = (NSDecimalNumber *) self;
uint64_t tmp = (uint64_t) (asDecimal.doubleValue / 10.0);
NSDecimalNumber* tmp1 = [[NSDecimalNumber alloc] initWithUnsignedLongLong:tmp];
NSDecimalNumber* tmp2 = [tmp1 decimalNumberByMultiplyingByPowerOf10: 1];
NSDecimalNumber* remainder = [asDecimal decimalNumberBySubtracting:tmp2];
return (tmp * 10) + remainder.unsignedLongLongValue;
}
else
{
return self.unsignedLongLongValue;
}
}
答案 1 :(得分:0)
或处理原始JSON字符串,查找“”id“= number; ”。通常包含空格,您可以找到该数字,然后用引号引用它。您可以将数据放入可变数据对象并获取指向它的char指针,以覆盖。
[使用iPhone输入有点简洁]