在目标C中解析流式JSON

皮拉特

我在TCP上使用JSON-RPC,问题是我找不到能够正确解析多个JSON对象的JSON解析,并且由于没有使用分隔符,因此很难拆分。

任何人都知道我该如何处理的方法:

{"foo":false, "bar: true, "baz": "cool"}{"ba

我需要以某种方式对其进行拆分,因此最终只能得到第一个完整的JSON对象。剩下的字符串需要留在缓冲区中,直到我有足够的数据来正确解析它为止。

gnasher729

@ePirat,如果有人只是串联多个不带定界符的JSON字典,就应该对它们进行射击。

对于解析:JSONSerialization解析NSData,它可以以任何编码形式出现。幸运的是,如果您串联了多个JSON字典,则它们很容易分解。您只需要查看字节并检查字符\“ {和}。

如果找到{,则增加“开括号”的计数。如果找到},则减少“开括号”的计数。如果计数器为零,则说明字典已结束。

如果找到一个“,则重复查看下一个字符。如果下一个字符是一个”,则跳过它并转到常规处理(您已找到字符串的结尾)。如果下一个字符是\,则跳过该字符和下一个字符。如果下一个字符是其他字符,请跳过该字符。

如果到达数据末尾,则您的JSON数据不完整。您可能会记得您所处的状态(方括号的数量,是否正在解析字符串,是否正在解析字符串是否是否遇到了反冲字符),然后从上次中断的位置继续。

在将NSData拆分为字典之前,无需将其转换为字符串。如果怀疑给您提供了UTF-16或UTF-32,请检查字节0、1、2或1、2、3是否为零(UTF-32),然后检查字节0和2或1和3是否为0。零(UTF-16)。但是在这种情况下,如果服务器在UTF-16或UTF-32中发送非标准JSON,则将“负责人打死”更改为“负责人打死”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章