在iOS中解析连续的JSON流

2024-04-14

我正在努力掌握我正在编写的应用程序的 JSON 技巧。在应用程序端,我有一个 NSInputStream,它通过 CFStreamCreatePairWithSocketToHost 连接到服务器。

服务器正在以异步方式为应用程序生成 JSON 对象。

在应用程序中,我对 NSStreamEventHasBytesAvailable 事件上的网络数据做出反应。在某些网络上,我发现网络缓冲区中收到了多个 JSON 对象。但我还想处理在一个网络缓冲区中没有收到整个 JSON 对象的情况。

我一直在寻找一个可以为我处理这些场景的 JSON 解析器,但一直没能找到。 NSJSONSerialization 不能很好地处理要传递的 NSData 中的多个 JSON 对象。我无法掌握如何让 NSJSONSerialization 在流上工作,并且不确定它是否能解决我的问题。

我研究过 YAJL 但我只能让它工作不止一次。我似乎找不到任何适合我的场景的好例子。

我感到沮丧和困惑什么是最好的方法以及在哪里可以找到一个很好的例子?欢迎任何建议!


有一个图书馆叫SBJson https://github.com/stig/json-framework

这是一个例子(从这里 https://github.com/stig/ChunkedDelivery/blob/master/ChunkedDelivery/SBViewController.m):

- (IBAction)go {
    id block = ^(id item, BOOL *stop) {
        dispatch_async(dispatch_get_main_queue(), ^{
            // do something with item
        });
    };

    id eh = ^(NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            // handle error
        });
    };
    self.parser = [SBJson4Parser unwrapRootArrayParserWithBlock:block
                                                   errorHandler:errorHandler];

    NSURLSessionConfiguration *c = [NSURLSessionConfiguration defaultSessionConfiguration]
    NSURLSession *urlSession = [NSURLSession sessionWithConfiguration:c
                                                             delegate:self
                                                        delegateQueue:nil];
    NSURL *url = [NSURL URLWithString:self.urlField.text];
    NSURLSessionDataTask *urlSessionDataTask = [urlSession dataTaskWithURL:url];
    [urlSessionDataTask resume];
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
    didReceiveData:(NSData *)data {
    switch ([self.parser parse:data]) {
        case SBJson4ParserError:
            self.parser = nil;
            break;
        case SBJson4ParserComplete:
        case SBJson4ParserStopped:
            self.parser = nil;
            break;
        case SBJson4ParserWaitingForData:
            break;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在iOS中解析连续的JSON流 的相关文章

  • ios 11 - UIBarButtonItem 内的 UIButton 导致自动布局错误

    我在将 UIButton 添加到 UIBarButtonItem 时遇到了一个已知问题 我尝试按照建议添加自动布局约束堆栈溢出 https stackoverflow com a 46336639 505603但我收到如下所述的错误 UIB
  • 将捕获的图像精确裁剪为 AVCaptureVideoPreviewLayer 中的外观

    我有一个使用 AV Foundation 的照片应用程序 我使用 AVCaptureVideoPreviewLayer 设置了一个预览层 它占据了屏幕的上半部分 因此 当用户尝试拍照时 他们只能看到屏幕上半部分看到的内容 这很好用 但是当用
  • 如何在 Swift 中创建 UIAlertView?

    我一直在努力在 Swift 中创建 UIAlertView 但由于某种原因我无法得到正确的语句 因为我收到此错误 找不到接受提供的 init 重载 论点 我是这样写的 let button2Alert UIAlertView UIAlert
  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV
  • iOS uiwebview 在 WebThread 中崩溃

    我正在寻求一些建议或帮助诊断我所看到的这次崩溃 目前 我认为这可能是一个 webkit 错误 但一切皆有可能 因此请提供您可能有的任何见解 Incident Identifier AEB8EE37 E5D4 4975 97F4 2B2038
  • 如何使用 SwiftUI 获取多个屏幕上的键盘高度并移动按钮

    以下代码获取键盘显示时的键盘高度 并将按钮移动键盘高度 在转换源 ContentView 和转换目标 SecibdContentView 处以相同的方式执行此移动 但按钮在转换目标处不移动 如何使按钮在多个屏幕上移动相同 import Sw
  • 在 UITextView 中获取 HTML

    我在中显示htmlUITextView by self textView setValue b Content b forKey contentToHTMLString 编辑内容后UITextView 我想获取包含 html 的内容 所以我
  • 如何区分 iTunes Connect / Apple TestFlight 上的 STAGE 和 PRODUCTION 版本?

    阶段构建与阶段服务器的对话 阶段服务器与生产服务器尽可能相同 以用于测试目的 生产构建与生产服务器的通信 生产服务器存储真实的关键数据 这些构建本质上是针对同一应用程序的 但是 iTunes Connect 界面将向您显示以下内容 即构建由
  • Angular 4 显示其中的数据

    我不喜欢从 API 返回到我的 Angular 4 应用程序的数据 这是 JSON 的示例 我不关心美元 但这是我正在处理的数据类型 最终目标是在页面上展示 Coin Price BTC 4 281 28 ETH 294 62 etc JS
  • 如何使用表内的 JSONB 数据类型和 PostgreSQL JDBC 驱动程序将 JSON 对象存储到 PostgreSQL 中

    我想将以下 json 对象保存到 PostgreSQL 数据库表中as jsonb fname john lname doe 我当前使用 PGObject 创建对象并将类型设置为 jsonb 并将值作为 json 字符串传递 寻找更好的 m
  • 在情节提要中将 Segue 拖至自身

    我想将一个 Segue 从我的视图控制器拖到其自身 所以我可以推送该特定视图控制器的 无限 实例 我知道如何在代码中执行此操作 即以编程方式实例化视图控制器 但是 我想尽可能使用 segues 我发现了一些在故事板中进行自我延续的 技巧 但
  • 更改 JSON.NET 序列化属性名称的方式

    如何更改 Newtonsoft JSON NET 序列化对象属性名称的方式 有几种方法 You can manually control how it serializes using the JsonTextWriter class ht
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • UILabel 中的文本未垂直居中

    我使用以下代码创建了一个标签 func setupValueLabel valueLabel numberOfLines 1 valueLabel font UIFont name Avenir Black size 50 valueLab
  • removeItemAtPath 完成

    我正在以这种方式删除路径上的文件 UIPanGestureRecognizer gesture UIPanGestureRecognizer sender UIButton button UIButton gesture view UIPa
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题
  • 子类 PFObject 上的 PFUser 属性

    我使用以下类 动态属性以及 m 文件中的 load 和 parseClassName 方法 对 PFObject 进行了子类化 interface DAOpponents PFObject
  • WKWebview 中的 iCLoud 文档选择器关闭容器视图

    我有一个 WKWebview 加载基于 Web 的 UI 我希望用户能够从其 iCloud 文档上传文件 我已授予正确的权限 并且可以浏览 iCloud 文档 但是 当我选择文件或单击取消按钮时 文档选择器视图也会关闭 WKWebview
  • 如何将自定义 C 代码放入 SwiftPM 包中?

    我正在尝试将 C 代码打包到 Swift 模块中 我们称之为CModule 一旦我将其放入项目的基本文件夹中 Swift模块 并配置了搜索路径 我可以在 Swift 文件中自动完成工作 并检测错误 警告 问题是 导入时它无法识别该模块 并且

随机推荐

  • jQuery:检查字符串中是否存在特殊字符

    我知道这个问题在 Stack 上被问得更频繁 但我似乎无法从已经发布的问题中得到直接的答案 我需要检查所有特殊字符 除了 是否都在字符串中 如果是 则向用户发出警报 到目前为止我所拥有的是这样的 if Search val indexOf
  • 我可以在 C# *using* 块中拥有不同类型的对象吗?

    using Font font3 new Font Arial 10 0f font4 new Font Arial 10 0f Use font3 and font4 我知道可以在一个对象内使用多个相同类型的对象using clause
  • PhoneGap Build 版本 2.7.0 忽略 Android 上 config.xml 中的全屏首选项

    我已遵循此页面上非常明确的说明 https build phonegap com docs config xml https build phonegap com docs config xml 我已在 config xml 文件中包含以下
  • 有人能够正确使用 libsensors 吗?

    长话短说 我正在尝试编写一个可以检查CPU温度的应用程序 使用 libsensors 3 手册页 我至少能够获得 libsensors version 号 截至目前 这是我的代码 include
  • 在 Slack 上发布带有附加文件的消息

    我正在用 C 编写一个简单的控制台应用程序来与 Slack com 进行通信 我通过他们的 WebApi 执行此操作 目前我知道如何发布消息 带有附件 彩色 链接 用户等 并将文件发送到服务器 如果您以正常方式发送文件 键入文本框左侧的 上
  • 目录中的文件按文件名升序排序

    我有一个目录中的文件列表 我想按文件名对其进行排序 这是主要代码 var localPath this Server MapPath Content Img type var directory new DirectoryInfo loca
  • Date.toString() 显示哪个时区?

    默认情况下 方法执行哪个时区java util Date toString http download oracle com javase 6 docs api java util Date html toString 28 29展示 自从
  • 从服务器下载图像以显示在 CollectionView 上

    我正在开发一个用户可以出售 购买的产品应用程序 该应用程序基于集合视图 集合视图具有集合单元格 其中显示产品图像缩略图 以下代码从服务器获取产品图像 并等待下载所有图像 然后将它们显示在单元格中 以下代码有效 但用户需要等待 10 20 秒
  • 在 Woocommerce 3 中以编程方式更新产品库存

    我非常需要帮助 我正在尝试以编程方式更新 woocommerce 产品库存数量 我们通过一些 JSON 向我们提供了供应商提要 我可以从提要中读取股票 并可以正确地从帖子元中提取数据 我正在使用最新版本的 WP 和 WOO PHP 是 7
  • Android:显示一个对话框以启用 wifi

    我想 如果 wifi 被禁用 向用户显示一个对话框 可以决定他是否要启用或禁用 wifi 好吧 我可以查看 wifi 是否已启用 但我如何显示该设置对话框 这是我正在使用的代码 if wifiMan isWifiEnabled false
  • 在 spring3 控制器上返回“ModelAndView”或“String”哪个更好

    ModelAndView的返回方式 RequestMapping value list method RequestMethod GET public ModelAndView list UserAuth UserAuth user Mod
  • 是否可以在 MVC3 (C#) 中为 `[Display(Name="Something")]` 数据注释使用变量

    不知道为什么 但 MVC3 中的数据注释坚持具有常量值 我只是无法理解错误消息和显示名称等内容 我喜欢这些注释 它们非常易于使用且功能强大 但是如果您需要支持多种语言怎么办 想象一下我有以下模型 public class Person pu
  • 如何根据SSIS中的用户变量值在数据流中使用if..else

    I have a fairly straightforward SSIS package with a number of Data Flow tasks each with data flows for multiple tables l
  • 如何查看导致 clr.dll 中崩溃转储的 C# 代码?

    我有一个 Windows 窗体应用程序 NET 4 它在我的开发计算机上运行良好 但在其他两台测试计算机上崩溃 我可以加载它在 VS2010 中创建的小型转储 选择 使用混合调试 会导致 Visual Studio 明显无休止地滥用 CPU
  • CLR 如何加载 DLL?

    我的假设始终是 CLR 在应用程序域启动时加载了它所需的所有 DLL 然而 我写了一个例子 让我对这个假设提出质疑 我启动我的应用程序并检查加载了多少模块 Process ObjModulesList ProcessModuleCollec
  • 如何 Gammu 发送 php shell_exec windows 7 和 xampp?

    我已经安装了XAMPP最新版本并安装了gammu 在终端中 我可以发送短信或识别我的手机 但如果我在 php shell exec 或 exec 上尝试相同的命令 则会出现问题 命令 C Program Files gammu bin ga
  • 将 boost 序列化与犰狳 datum::nan 值结合使用

    我在我的 C CLI 程序中使用 boost 序列化 并且某些类具有包含一些 double 的数据成员 这些 double 被初始化为 arma datum nan 犰狳库的 非数字 值 我通过 boost archive text oar
  • 如何使用spring AOP切入点表达式拦截返回类型List

    以下是我的方面课程 我正在努力让所有的回报List从我的baserepostitary Aspect Service public class DecryptionAspect AfterReturning value execution
  • 重置 git 设置

    当我尝试下载时this https git01 codeplex com casablancagit repo 我不断得到error RPC failed result 56 HTTP code 200我认为这是因为我弄乱了一些设置 我正在
  • 在iOS中解析连续的JSON流

    我正在努力掌握我正在编写的应用程序的 JSON 技巧 在应用程序端 我有一个 NSInputStream 它通过 CFStreamCreatePairWithSocketToHost 连接到服务器 服务器正在以异步方式为应用程序生成 JSO