NSJSON 序列化的错误结果

Incorrect result from NSJSON Serialization

当我尝试反序列化我的 json 字符串时遇到一个非常奇怪的问题,代码是这样的:

NSString *testString = @"{\"cash\": 99946.222300000000}";
//    NSString *testString = @"{\"cash\": \"99946.222300000000\"}"; //It's correct if I use this one
NSData *jsonData = [testString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"Convertion result is %@",error?@"false":@"true");
NSLog(@"Result data is\n %@",jsonObject);

结果是:

2017-08-30 18:04:36.430 DAE[45557:2989692] Conversion result is true
2017-08-30 18:04:36.430 DAE[45557:2989692] Result data is
{
    cash = "99946.22229999999";
}

如果我做错了什么,有人能告诉我吗?以及如何解决?

非常感谢您的帮助。

将其用作您的注释字符串

NSString *testString = @"{\"cash\": \"99946.222300000000\"}";  

NSData *jsonData = [testString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData 
options:NSJSONReadingAllowFragments error:nil];
NSLog(@"Convertion result is %@",error?@"false":@"true");
NSLog(@"Result data is\n %@",jsonObject);

首先,没有错,是对的

那么,为什么你得到了错误的结果?

首先,json 值将通过 NSJSONSerialization;

转换为 NSNumber 对象

然后NSDictionary的-description方法通过stringValue方法生成结果

您应该通过这种方式解析 json 值以获得正确的字符串:

[NSString stringWithFormat:%lf, [jValue doubleValue]]

但是你要注意取值的长度,double的最大长度是16,所以如果你得到一个超过它的数字,你永远不会得到正确的结果。

告诉你的后台人员,他们应该把所有的数字都转换成字符串,然后再发出,因为如果它足够大,很难正确解析它们。