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,所以如果你得到一个超过它的数字,你永远不会得到正确的结果。
告诉你的后台人员,他们应该把所有的数字都转换成字符串,然后再发出,因为如果它足够大,很难正确解析它们。
当我尝试反序列化我的 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,所以如果你得到一个超过它的数字,你永远不会得到正确的结果。
告诉你的后台人员,他们应该把所有的数字都转换成字符串,然后再发出,因为如果它足够大,很难正确解析它们。