【问题标题】:SBJson Stream ParserSBJson 流解析器
【发布时间】:2012-09-26 19:55:53
【问题描述】:

我正在使用 Xcode 4.3.2 + 在 iOS 5 中构建应用程序。

我决定使用 SBJson 来解析来自我们服务器的数据流。我已经验证我正在从服务器接收到有效的 JSON 响应。我的问题涉及 SBJsonStreamParser 和 SBJsonParser 类背后的设计。

似乎在 SBJsonParser 中,“objectWithData”方法获取从 JSON 响应接收到的数据,并使用 SBJsonStreamParserAccumulator 将数据流附加到单个 JSON 文档中。一旦数据流被收集到一个对象中,它就会被 SBJsonStreamParser 中的“parse”方法解析。

我在请求较大的 JSON 文档时遇到了几个问题。响应的大小似乎是合理的(特别是 9.4 KB 响应)。似乎 SBJsonStreamParser 在获取大于特定大小的数据流时会中断。解析器在响应较小(~3KB)时成功,但在响应较大(~10KB)时失败。 我使用 NSLog 来验证在这两种情况下,拉一个小的和大的流,这些方法都成功地接收了完整的 json 文档——因为它看起来像 [{"id": .... 123}]。我确信问题在于数据流太长。

我想知道我是否错误地使用了 SBJson 或者这仅仅是解析器的限制?有什么我可以配置的东西允许 SBJsonStreamParser 不对更大(但合理)的数据流抛出错误并继续解析完整的响应?

提前致谢!

【问题讨论】:

  • SBJson报什么错误?
  • 在 SBJsonParser 中,在“objectWithData”的 switch 语句中,错误是 SBJsonStreamParserError 情况正在返回错误。在 SBJsonStreamParser 中,正在返回 sbjson_token_error 开关情况。
  • 错误信息字符串是什么?它可能会给出提示......
  • 实际上没有错误消息。我只知道输入了一个错误开关。我不确定我的解释中遗漏了什么。
  • 请检查 SBJsonStreamParser / SBJsonParser 上的错误属性(无论您使用的是哪个)。如果解析器失败但没有设置错误属性,我会非常有兴趣看到发布到github.com/stig/json-framework/issues 的可重现测试用例,因为那将是一个错误。

标签: objective-c json parsing sbjson


【解决方案1】:

实际上,objectWithData: 的工作原理是向后的。 SBJsonStreamParserAccumulator 用于累积解析后的输出,而不是未解析的数据流。

【讨论】:

  • 我只是好奇。你能解析大约 10KB 的 JSON 响应吗?
  • 是的。测试套件解析一个 100KB 长的数据流,如果您构建 TweetStream 示例项目,它将解析一个永远不会完成下载的 JSON 流。
猜你喜欢
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多