我需要将JSON数据从应用程序(IOS)上传到后端服务器。
目标是优化上传数据包的大小,该数据包被JSON编码为NSString。该字符串目前约为5MB,但主要包含精度超过必要精度的双打。
通过删除不必要的小数位数,数据包的大小可以减少约40-50%。这必须根据钥匙进行定制。
根据键的不同,创建具有不同有效位数或小数位数的JSON字符串的最佳方法是什么。
您可能需要做一些实验。假设您希望发送带有两个十进制数字的数据,比如3.14,而不是pi。你知道你必须把所有的数字都变成NSNumber。你可以通过写把x变成一个有两个小数的数字
double asDouble = 3.141592653;
NSNumber* asNumber = @(round (asDouble * 100.0) / 100.0);
然而,您需要检查这是否始终有效;如果运气不好,这可能会向您的服务器发送3.140000000000000000000001。
很明显,你可以用1000.0等代替100.0。不要用0.01的乘积代替除法,因为这会增加舍入误差,也会增加获得大量小数位数的机会。
你可以检查一下如果你写会发生什么
NSNumber* asNumber = @((float) asDouble);
如果NSJSONSerialization足够聪明,它将发送更少的小数。