我有一个REST API,它希望文件大小字段以字节为单位。但是我观察到NSJSONSerialization正在将我的值转换为我的服务器不支持的指数表示。
例如:
unsigned long long fileSize = 100000000000;
NSDictionary *myObject = @{"fileSize": @(fileSize)};
NSData *dataToSend = [NSJSONSerialization dataWithJSONObject:myObject options:0 error:nil];
// send dataToSend to network
在线上,我发现发送了以下内容:
{ "fileSize" : 1.0e+11 }
有没有办法强制NSJSONSerialization在线上保留unsigned long long格式?
E.g。
{ "fileSize" : 100000000000 }
更新:感谢Gabriele Petronella
更正了我的示例代码答案 0 :(得分:1)
我的问题中没有看到任何NSJSONSerialization
,无论如何将字典转换为NSData
实例似乎是错误的,并且可能会导致此编码问题。做一些像
NSDictionary *myObject = @{"fileSize": @(fileSize)};
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:myObject options:0 error:nil];
答案 1 :(得分:0)
事实证明,我现在能够通过明确地将NSNumber初始化为无符号长long来解决这个问题。
E.g。
unsigned long long fileSize = 100000000000;
NSDictionary *myObject = @{"fileSize": [NSNumber numberWithUnsignedLongLong:fileSize]};
NSData *dataToSend = [NSJSONSerialization dataWithJSONObject:myObject options:0 error:nil];
// send dataToSend to network
这导致我预期的输出:
{ "fileSize" : 100000000000 }