2012-11-20 13 views
15

Sto seguendo la risposta JSON da un servizio Web API. Voglio estrarre i dati di prodotto da JSON. Voglio anche implementarlo usando AFNetworking.AFNetworking e jSON

{"products": [ 
    { 
     "product_id": "1170", 
     "name": "zzzz®", 
     "sort_order": 0, 
     "brand": "zzzas", 
     "product_category_id": "1090", 
     "location_ids": [ 
     "1078" 
     ], 
     "icon_url": "http://zzzzz.com/media/2502/zzzz.png", 
     "icon_date": "Wed, 07 Nov 2012 14:03:47 GMT", 
     "thumbnail_url": "http://zzzz.com/media/2591/zzdfs.png", 
     "thumbnail_date": "Wed, 07 Nov 2012 14:04:02 GMT" 
    }, 
    { 
     "product_id": "1126", 
     "name": "ddddd®", 
     "sort_order": 1, 
     "brand": "dddsas", 
     "product_category_id": "1110", 
     "location_ids": [ 
     "1095" 
     ], 
     "icon_url": "http://zzzzz.com/media/2507/ddddd.png", 
     "icon_date": "Wed, 07 Nov 2012 14:03:48 GMT", 
     "thumbnail_url": "http://zzzzz.com/media/2596/sssds.png", 
     "thumbnail_date": "Wed, 07 Nov 2012 14:04:05 GMT" 
    } 
]} 

Qualcuno può suggerire un modo per fare questo mi . come saranno fatte le cose.

risposta

37
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"link"]]; 
AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request 
    success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { 
     NSDictionary *jsonDict = (NSDictionary *) JSON; 
     NSArray *products = [jsonDict objectForKey:@"products"]; 
     [products enumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop){ 
      NSString *productIconUrl = [obj objectForKey:@"icon_url"]; 
     }]; 

    } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, 
     NSError *error, id JSON) { 
      NSLog(@"Request Failure Because %@",[error userInfo]); 
    } 
]; 

[operation start]; 

Prova questo.

Update 1: Si può provare questo https://github.com/SSamanta/SSRestClient

Aggiornamento 2: https://github.com/SSamanta/SSHTTPClient (Usando Swift)

Disponibile Pod:pod 'SSHTTPClient', '~>1.2.2'

+0

grazie mille per aver analizzato il file. Controlla anche se hai del tempo libero http://stackoverflow.com/questions/13478437/afnetworking-queue-with-pdf-png-mp4-files – Filip

+1

@Filip controlla il rispondi a quel link –

+0

grazie San ha accettato la tua risposta! – Filip

3

Se si sta appena iniziando, si consiglia di utilizzare RestKit per questa attività (fa uso di AFNetworking). Guarda un esempio here.

+6

penso kit resto è troppo complesso per la mia applicazione – Filip

+0

RestKit non sembrare piuttosto gonfio ora. – tybro0103

4

Per analizzare JSON con AFNetworking, è sufficiente creare una sottoclasse e aggiungere quanto segue durante l'inizializzazione.

[self registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

Poi chiamando un metodo come GET:parameters:completion: chiamerà il blocco completamento con NSDictionary come parametro response (supponendo che il JSON è valido).

Per scaricare le immagini, supponendo che si desideri visualizzarle, consultare UIImageView+AFNetworking.

+0

voglio anche scaricare alcuni file pdf molto grandi e alcuni video. ci penso che ho avuto un problema con quelli – Filip

+1

solo registerhttpoperationclass non è sufficiente per ottenere i dati di risposta JSON. I passaggi completi sono: '[self registerHTTPOperationClass: [AFJSONRequestOperation class]];' e '[self setDefaultHeader: @" Accept "valore: @" application/json "]'. fa riferimento a [qui] (https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ#why-dont-i-get-json--xml--property-list-in-my-http-client- callbacks) – jianpx

+0

@jianpx Dipende dal server con cui stai parlando e dal fatto che tu voglia o meno le risposte JSON per tutte le tue richieste. Se lo fai, allora sicuramente imposta l'intestazione. –

0

Innanzitutto, per eseguire AFNetworking è necessario prima installare "CocoaPods". Cos'è questo? CocoaPods è un gestore di dipendenze per Objective-C che rende l'installazione di librerie di terze parti come AFNetworking molto più veloce e sicura. Esso è fornito come un rubino gemma che è possibile installare il seguente modo:

aprire il terminale ed eseguire i seguenti comandi:

sudo gem install cocoapods -V 

Siate pazienti. Questo comando può richiedere del tempo, quindi l'opzione "-V" ti fornirà dati dettagliati su cosa sta succedendo.

Poi si esegue:

pod setup 

che definisce la nostra installazione CocoaPods.

Ora dobbiamo creare un PodFile che funzionerà come nostro file di configurazione per CocoaPods.

Torna al terminale e scriviamo i seguenti comandi:

touch Podfile 
open -e Podfile 

Il primo comando creerà un file denominato “Podfile” con l'editor tocco di Unix. La seconda riga aprirà questo file appena creato per la modifica. A questo punto dovresti vedere una finestra TextEdit vuota aperta. Ora incolliamo quanto segue all'interno di questo file:

platform :ios, '7.0' 
pod "AFNetworking", "~> 2.0" 

Ora è il momento di impostare il nostro ambiente di lavoro Cocoa. IMPORTANTE: assicurati di cambiare la directory con il tuo terminale in DIRECTORY ATTUALE del tuo XCODE PROJECT usando il comando 'cd' nel terminale. Esempio:

cd /user/xcode/myproject 

Una volta che siete sicuri che siete nella directory appropriata eseguire il seguente comando da terminale:

pod setup 

E poi installiamo le dipendenze al nostro progetto scrivendo:

pod install 

Ora, questa è una nota importante: Dato che stai tentando di installare un progetto che precedentemente non era all'interno della tua attuale X progetto di codice è necessario creare un'area di lavoro per il progetto Xcode corrente Per creare uno spazio di lavoro per il progetto Xcode effettuare le seguenti operazioni (se non avete fatto questo già.):

File > Save Workspace 

Una volta fatto, accedere alla la directory del file di lavoro Xcode ed eseguire il seguente comando:

open YourProjectName.xcworkspace 

Ora si può semplicemente usare “import” all'inizio di qualsiasi file per accedere alle funzionalità incorporate API di AFNetworking.

12

se si sta utilizzando AFNetworking 3.0, AFJSONRequestOperation non esiste più, è necessario utilizzare AFHTTPSessionManager:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager GET:@"http://example.com/resources.json" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) { 
    NSLog(@"JSON: %@", responseObject); 
} failure:^(NSURLSessionTask *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 
Problemi correlati