有效的 JSON,但来自 AFNetworking/NSJSONSerialization 的“Cocoa 错误 3840”

2024-03-05

我已经花了几个小时试图解决这个问题,但没有成功 - 似乎我唯一的选择就是在这里发帖,看看是否有人可以阐明这个问题。这可能是 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
                ]
            }
        ]
    }
}

现在,将其插入 jsonlint.com(并且了解一些有关 JSON 格式的知识),很容易看出这是有效的 JSON。

我正在使用 AFHTTPClient 子类来发布我的请求并接收数据。这是我用来发布的代码:

[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);
    }
}];

这里没什么特别的,我只是将响应转换成一些 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.}

JSON 中包含一个指数数(具体为 4.439049394553e-312),但这是有效的数字,应该能够被解析。当我尝试使用 NSJSONSerialization 解析响应数据时,我得到相同的 NSError 。只是为了澄清 - AFNetworking 给了我与 NSJSONSerialization 相同的错误消息。

我找不到其他人和我有同样问题的人,也无法弄清楚为什么我的 JSON 无法解析。它给我的应用程序留下了一个非常大的错误,我无法修复。

如果有人能够阐明这个问题,那就太好了。如果这不是 AFNetworking 的问题,如果您能给我指出一个有用的资源,那就太棒了。当然,如果您需要更多信息,请询问

谢谢。


NSJSONSerialization uses NSDecimalNumber代表数字,并且

[NSDecimalNumber decimalNumberWithString:@"4.439049394553e-312"]

已经返回NaN, 因为NSDecimalNumber只能代表数字

mantissa x 10^exponent         where `-128 <= exponent <= 127`.

所以这似乎是一个“限制”(或错误)NSJSONSerialization,它仅适用于 一定范围内的数字。

我用“SB JsonParser”进行了快速测试,它也有同样的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效的 JSON,但来自 AFNetworking/NSJSONSerialization 的“Cocoa 错误 3840” 的相关文章

  • Node.js - 异步 JSON 查询

    如果这是一个愚蠢的问题 我深表歉意 但我对 Javascript 很陌生 而 Node js 确实让我很头疼 因为它是异步的 我的目标是从 API 查询 JSON 对象并能够使用它 我试图寻找关于我应该做什么的问题和答案 但它们对我来说都没
  • 解析和更改 NSPredicate

    我必须将数据从以前的应用程序版本迁移到新版本 这也会影响一些谓词 NSPredicate实例 由用户保存 这意味着我必须以编程方式更改它们 目前我尝试解析我得到的字符串 NSPredicate predicateFormat 并手动更改一些
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • 从 NSError 返回 NSString

    我正在使用NSURLRequest我的 iPhone 应用程序中的类 调用它的方法返回一个NSString这对于连接正常时非常有用 但问题是我需要将 NSError 转换为 NSString 以便我可以将其返回或运行一些if 对此的声明 有
  • iPhone SDK - 在后台线程中运行重复进程

    我有一个iPhone我想在其中每隔一段时间在后台执行一个方法的应用程序1第二 所以在我的主线程中 我有以下代码UIViewController viewDidLoad NSTimer timerWithTimeInterval 1 0 ta
  • 为什么 GDB 调试器不断冻结 Xcode 4?

    这真是一个奇怪的错误 我正在开发一个使用相机源的 iPhone 项目 并通过 OpenGL 着色器运行它以对其应用效果 然而 每次我在代码中简单地创建一个新的 GLfloat 时 调试器都会在启动时冻结 我无法复制和粘贴文本 因为整个 XC
  • 访问iOS 7隐藏的UITableViewCellScrollView?

    苹果改变了UITableViewCelliOS 7 中的层次结构 使用iOS 6 1 SDK
  • IIS 上托管的 WCF 服务无法运行

    我想构建一个公开 basicHTTP 端点和 webHTTP 端点的服务 如果我在运行模式下使用 VS2010 测试以下项目 一切都很好 但我想在 IIS 中托管服务 本地或远程 并通过测试 服务 svc 我将我的网站托管到本地 IIS 中
  • Parse.com - 获取 [PFUser currentUser] 中包含的指针数据

    我正在使用 Parse com iOS SDK 并且我不知道需要调用什么方法来确保 PFUser currentUser 包含其中包含的每个指针的数据 这可能很简单 但是 作为这个平台的初学者 我找不到解决方案 只是为了澄清一下 我试图在下
  • Swift NSViewController 响应 mouseDown 事件,但不响应 keyDown 事件

    我正在尝试使用 Swift 和 Cocoa 创建一个适用于 OS X 的应用程序 我希望应用程序能够响应关键事件 而不将焦点放在文本字段上 中 我在 Xcode 中创建了一个带有故事板的新 Cocoa 项目 并将 ViewControlle
  • 根据内容将 JSON 动态反序列化为派生类型?

    在我作为一个业余项目编写的小库中 我使用 RestSharp 从 Web API 获取 Json 反序列化为模型类对于简单类型来说效果很好 但在某些端点 结果类型在请求时未知 或不清楚 具体来说 它是 GuildWars2 API v1 一
  • activeProcessorCount 和processorCount 之间有什么区别?

    The NSProcessInfo类有两个名为processorCount and activeProcessorCount 该文档对于处理核心和活动处理核心之间的区别尽可能没有帮助 或者 换句话说 什么才算是一个inactive可可的处理
  • 检测 UITableView 中的水平平移

    我正在使用 UIPanGestureRecognizer 来识别 UITableView 中的水平滑动 准确地说是在单元格上 尽管它已添加到表格本身 然而 这个手势识别器显然窃取了桌子上的触摸 我已经让 pangesturerecogniz
  • ObjC <-> Swift 桥接和工厂方法

    我想从 Swift 使用一些 Objective C 类 由于超出了这个问题范围的原因 我的班级init方法被标记为不可用 相反 有一个工厂方法 这是我的班级的简化形式 interface MyClass NSObject instance
  • 如何在可可中使用核心动画对 png 序列进行动画处理(非触摸)

    我想在 NSImageView 中对 png 序列进行动画处理 但我无法使其工作 它只是不想显示任何动画 有什么建议吗 这是我的代码 void imageAnimation NSMutableArray iconImages NSMutab
  • iOS 中的词干 - 不适用于单个单词

    我在用NSLinguisticTagger用于词干提取 我能够获得句子中单词的词干 但无法获得单个单词的词干 以下是我正在使用的代码 NSString stmnt i waited NSLinguisticTaggerOptions opt
  • 可可:NSView原点x在底部

    我正在以编程方式创建一个NSWindow以及其上的控件 看来原点 0 0 位于左下角 这对我来说很奇怪 来自其他 GUI 工具包 是否有一些标志 以便我可以更改它 使原点位于左上角 在 OS X 上 原点位于左下角 对于屏幕坐标和视图框架来
  • 后台模式下的 AVSpeechSynthesizer

    我无法获取 iOS 7AVSpeechSynthesizer当我的 iOS 应用程序处于后台模式时工作 我添加了 应用程序播放音频 应用程序支持的后台模式的关键 但我仍然无法让它工作 我还研究了创建一个AVMutableCompositio
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反
  • 从json中获取所有子节点

    我有以下 json var source k 01 k 02 children k 05 k 06 children k ABC k PQR k 07 k 03 我希望能够指定 k 的值并取回所有孩子 以及孙

随机推荐