Quale sarebbe il modo più elegante per ricevere dati da un'API JSON in streaming utilizzando AFNetworking? AFNetworking fornisce un eccellente supporto per la ricezione di dati non in streaming dalle API JSON, ma non sono riuscito a trovare alcun esempio di streaming JSON.Streaming JSON con AFNetworking su IOS
risposta
AFNetworking non ha un'operazione di JSON in streaming in stile SAX incorporata, ma dovrebbe essere semplice da crearne.
- creare una sottoclasse di
AFJSONRequestOperation
- Utilizzare la proprietà
outputStream
dell'operazione durante l'inizializzazione per collegarlo ad un parser JSON che supporta in stile SAX parsing (come Yajl). Il parser leggerà i dati e costruire l'oggetto JSON come viene in - Agganciare la proprietà
responseJSON
per leggere l'oggetto in cache dal parser - ... o seconda di come si sta facendo in streaming, potrebbe essere necessario per aggiungere una nuova proprietà che definisce un blocco da eseguire quando vengono restituiti nuovi oggetti JSON (ad esempio
setReceivedJSONBlock:((^)(void (id JSON))block
). Questo blocco verrà probabilmente attivato dai metodi delegati inviati dal parser (ad esempio<YAJLParserDelegate> -parserDidEndDictionary:
).
Se sei in grado di farlo funzionare, ti incoraggio a pubblicarlo e condividerlo con gli altri. Penso che questo potrebbe essere utile a molte persone.
Grazie per la risposta, proverò l'approccio suggerito! – akisaarinen
Questo non funzionerà facilmente con AFNetworking. Innanzitutto, il metodo AFURLConnectionOperation -connection: didReceiveData: non è implementato correttamente. Funziona solo per i flussi che consumano sempre TUTTI i byte forniti dalla connessione. Ciò include flussi di file e flussi di memoria. Tuttavia, per "interfacciare" l'API del flusso di un parser con NSURLConnectionDelegate è necessario un approccio più elaborato che implichi una sorta di "coda sincrona" come mezzo per trasportare i dati e un flusso accoppiato che abbia un buffer di dimensione fissa. – CouchDeveloper
Puoi spiegarci un po 'di più su questo? Come collegare outputStream al parser JSON? –
Hai mai fatto funzionare qualcosa del genere? –
Per quanto mi ricordo, sono riuscito a implementare un esempio di streaming JSON molto semplice, ma molto presto il mio interesse per il progetto IOS di cui avevo bisogno (per esempio un client CampFire) è stato eliminato. Niente di finito purtroppo è mai uscito da questo. :) – akisaarinen
Abbastanza giusto. Grazie per l'aggiornamento! –