当我尝试反序列化我的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";
}
任何人都可以告诉我,如果我做错了什么?以及如何解决它?
非常感谢任何帮助。
答案 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,所以如果你得到的数字超过它,你就永远得不到正确的结果。
告诉你的后端人,他们应该把所有的数字转换成字符串,然后再将它们发出来,因为如果它足够大,真的很难正确解决它们。