What would be the most elegant way to receive data from a streaming JSON API using AFNetworking? AFNetworking provides excellent support for receiving non-streaming data from JSON APIs, but I couldn't find any examples of streaming JSON.
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
AFNetworking does not have a built-in streaming SAX-style JSON operation, but it should be straight forward to create your own.
- Create a subclass of
AFJSONRequestOperation
- Use the
outputStream
property of the operation during initialization to hook it up to a JSON parser that supports SAX-style parsing (such as Yajl). The parser will read data and build up the JSON object as it comes in - Hook up the
responseJSON
property to read the cached object from the parser - ...or depending on how you're doing streaming, you may need to add a new property that defines a block to execute when new JSON objects come back (e.g.
setReceivedJSONBlock:((^)(void (id JSON))block
). This block will probably be triggered by delegate methods sent from the parser (e.g.<YAJLParserDelegate> -parserDidEndDictionary:
).
If you are able to get this working, I would encourage you to publish and share this with others. I think this could be useful to quite a few people.