Joh*_*ers 6 cocoa json objective-c afnetworking nsjsonserialization
我一直在乱砍几个小时试图解决这个问题无济于事 - 似乎我唯一的选择是在这里发帖,看看是否有人可以对这个问题有所了解.它可能是AFNetworking的问题,或者(更有可能),它可能是我的代码的问题.
我正在使用的代码完全适用于我的应用程序中99%的操作.我正在开发一个通过构建JSON搜索,发送它们并从服务器接收响应来利用Elastic Search的应用程序.
以下是返回的JSON示例:
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": null,
"hits": [
{
"_index": "asx",
"_type": "61a88d3848b00655d9aa59db70847318",
"_id": "b91f9257744fedb4ef1c127e275c127c",
"_score": null,
"_source": {
"value": "22/06/1998"
},
"sort": [
4.439049394553e-312
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
现在,将其插入jsonlint.com(并了解一些关于JSON格式),很容易看出这是有效的JSON.
我正在使用AFHTTPClient子类来发布请求并接收数据.这是我用来POST的代码:
[super postPath:path parameters:parameters success:^(AFHTTPRequestOperation *operation, NSDictionary *response) {
NSData *responseData = [(AFJSONRequestOperation *)operation responseData];
NSDictionary *responseDictionary;
if (responseData != nil) {
responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:NULL];
}
if (success) {
success(operation, responseDictionary);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSData *responseData = [(AFJSONRequestOperation *)operation responseData];
NSDictionary *responseDictionary;
if (responseData != nil) {
responseDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:NULL];
}
if (failure) {
failure(operation, error, responseDictionary);
}
}];
Run Code Online (Sandbox Code Playgroud)
这里没什么特别的,我只是把响应变成了一些JSON.
但问题是,对于特定请求,AFNetworking将响应视为失败,因此失败块中的代码是唯一正在执行的代码.我收到以下错误:
(lldb) po error
$1 = 0x0adbc710 Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Number wound up as NaN around character 279.) UserInfo=0xad968d0 {NSDebugDescription=Number wound up as NaN around character 279.}
Run Code Online (Sandbox Code Playgroud)
JSON中包含一个指数(具体为4.439049394553e-312),但这是有效数字,应该能够被解析.当我尝试使用NSJSONSerialization解析响应数据时,我得到相同的NSError.只是为了澄清 - AFNetworking给了我与NSJSONSerialization相同的错误信息.
我找不到其他与我有同样问题的人,也无法弄清楚为什么我的JSON无法解析.它给我的应用程序留下了一个非常大的错误,我无法修复.
如果有人能够对这个问题有所了解,那就太好了.如果它不是AFNetworking的问题,如果你能指出一个有用的资源,也会很棒.当然,如果您需要更多信息,请询问
谢谢.
NSJSONSerialization使用NSDecimalNumber来表示数字,和
[NSDecimalNumber decimalNumberWithString:@"4.439049394553e-312"]
Run Code Online (Sandbox Code Playgroud)
已经返回NaN,因为NSDecimalNumber只能代表数字
mantissa x 10^exponent where `-128 <= exponent <= 127`.
Run Code Online (Sandbox Code Playgroud)
所以这似乎是一个"限制"(或错误)NSJSONSerialization,它只适用于某个范围内的数字.
我用"SBJsonParser"进行了快速测试,它遇到了同样的问题.
| 归档时间: |
|
| 查看次数: |
4877 次 |
| 最近记录: |