NSJSON序列化的结果不正确

时间:2017-08-30 10:35:00

标签: objective-c json-deserialization nsjsonserialization

当我尝试反序列化我的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";
}

任何人都可以告诉我,如果我做错了什么?以及如何解决它?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

将它用作您的注释字符串

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);

答案 1 :(得分:1)

首先,这没错,这是正确的。

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

首先,json值将通过 NSJSONSerialization 转换为NSNumber对象;

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

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

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

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

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