2012-11-20 18 views
15

मुझे वेब-सेवा एपीआई से जेसन प्रतिक्रिया का पालन करना पड़ रहा है। मैं जेसन से उत्पाद डेटा निकालना चाहता हूं। मैं AFNetworking का उपयोग करके इसे कार्यान्वित करना भी चाहता हूं।AFNetworking और जेएसओएन

{"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" 
    } 
]} 

किसी को भी इस . मुझे ऐसा करने के लिए कैसे चीजें किया जाएगा एक तरह से बता सकते हैं।

उत्तर

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]; 

इसे आजमाएं।

अद्यतन 1: https://github.com/SSamanta/SSHTTPClient (स्विफ्ट का उपयोग करना)

उपलब्ध Pod:: आप इस https://github.com/SSamanta/SSRestClient

अद्यतन 2 की कोशिश कर सकतेpod 'SSHTTPClient', '~>1.2.2'

+0

फ़ाइल को पार्स करने के लिए बहुत कुछ धन्यवाद, अगर आपके पास कुछ अतिरिक्त समय है तो http://stackoverflow.com/questions/13478437/afnetworking-queue-with-pdf-png-mp4-files – Filip

+1

@ फिलिप जांचें उस लिंक में उत्तर –

+0

धन्यवाद सैन ने आपका जवाब स्वीकार कर लिया! – Filip

3

यदि आप अभी शुरू कर रहे हैं, तो मैं इस कार्य के लिए RestKit का उपयोग करने की सलाह दूंगा (यह AFNetworking का उपयोग करता है)। उदाहरण here देखें।

+6

मुझे लगता है कि बाकी किट अपने आवेदन – Filip

+0

RestKit अब बल्कि फूला हुआ प्रतीत होता है के लिए बहुत जटिल है। – tybro0103

4

जेएसओएन को एएफनेटवर्किंग के साथ पार्स करने के लिए, बस एक उपclass बनाएं और प्रारंभ के दौरान निम्नलिखित जोड़ें।

[self registerHTTPOperationClass:[AFJSONRequestOperation class]]; 

फिर GET:parameters:completion: की तरह एक विधि response पैरामीटर के रूप में एक NSDictionary (यह मानते हुए JSON मान्य है) के साथ पूरा होने के ब्लॉक कॉल करेंगे बुला।

छवियों को डाउनलोड करने के लिए, मान लीजिए कि आप उन्हें प्रदर्शित करना चाहते हैं, UIImageView+AFNetworking देखें।

+0

मैं कुछ वास्तव में बड़ी पीडीएफ फाइलों और कुछ वीडियो डाउनलोड करना चाहता हूं। वहां मुझे लगता है कि मुझे उन – Filip

+1

के साथ कोई समस्या थी, केवल पंजीकरण करें jpson प्रतिक्रिया डेटा प्राप्त करने के लिएhttpoperationclass पर्याप्त नहीं है। पूरी तरह से कदम हैं: '[स्वयं रजिस्टर एचटीटीपीऑपरेशन क्लास: [AFJSONRequestOperation class]];' और '[self setDefaultHeader: @" स्वीकार करें "मान: @" एप्लिकेशन/जेसन "]'। [यहां] (https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ#why-dont-i-get-json--xml--property-list-in-my-http-client- कॉलबैक) – jianpx

+0

@jianpx यह उस सर्वर पर निर्भर करता है जिस पर आप बात कर रहे हैं और चाहे आप अपने सभी अनुरोधों के लिए JSON प्रतिक्रियाएं चाहते हों या नहीं। यदि आप करते हैं, तो निश्चित रूप से हेडर सेट करें। –

0

ऑब्जेक्ट में जेसन को पार्स करने के लिए JSONModel का उपयोग करें।

0

सबसे पहले, AFNetworking चलाने के लिए आपको पहले "कोकोपोड" इंस्टॉल करने की आवश्यकता होगी। यह क्या है? कोकोपोड्स उद्देश्य-सी के लिए एक निर्भरता प्रबंधक है जो तृतीय पक्ष पुस्तकालयों को AFNetworking के रूप में अधिक तेज़ और सुरक्षित के रूप में स्थापित करता है।

टर्मिनल खोलें और निम्न आदेश पर अमल:: यह एक रूबी रत्न जो आप निम्नलिखित तरीके से स्थापित कर सकते हैं के रूप में प्रदान की जाती है

sudo gem install cocoapods -V 

धैर्य रखें। इस आदेश को समाप्त करने में कुछ समय लग सकता है, इसलिए "-V" विकल्प आपको विस्तृत डेटा प्रदान करेगा जो हो रहा है।

अगला हम निष्पादित करें:

pod setup 

कौन सा हमारे CocoaPods स्थापना सेट करता है।

अब हमें एक पॉडफ़ाइल बनाना है जो कोकोपोड के लिए हमारी कॉन्फ़िगरेशन फ़ाइल के रूप में सर्वर करेगा।

टर्मिनल पर वापस और हम लिख निम्न कमांड:

touch Podfile 
open -e Podfile 

पहले आदेश यूनिक्स स्पर्श संपादक के साथ "Podfile" नाम की एक फ़ाइल पैदा करेगा। दूसरी पंक्ति संपादन के लिए इस नव निर्मित फाइल को खुल जाएगी। अब तक, आपको एक खाली टेक्स्ट एडिट विंडो खोलनी चाहिए। अब हम इस फ़ाइल के अंदर निम्नलिखित पेस्ट करते हैं:

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

अब हमारे कोको कामकाजी माहौल को स्थापित करने का समय है। महत्वपूर्ण: कृपया टर्मिनल में 'cd' कमांड का उपयोग कर अपने एक्ससीडीई परियोजना की वर्तमान निर्देशिका में अपने टर्मिनल के साथ अपनी निर्देशिका को बदलना सुनिश्चित करें। उदाहरण:

cd /user/xcode/myproject 

एक बार जब आप यह सुनिश्चित करें कि आप उचित निर्देशिका पर निम्न टर्मिनल आदेश हैं निष्पादित कर रहे हैं:

pod install 
:

pod setup 

और फिर हम लेखन से हमारी परियोजना के लिए उनकी निर्भरता स्थापित

अब, यह एक महत्वपूर्ण नोट है: चूंकि आप एक ऐसी परियोजना स्थापित करने की कोशिश कर रहे हैं जो पहले आपके वर्तमान एक्स के अंदर नहीं था

File > Save Workspace 

हो जाने के बाद, पर जाएँ: कोड परियोजना, निम्न करना अपने Xcode प्रोजेक्ट के लिए एक कार्यक्षेत्र बनाने के लिए अपने वर्तमान Xcode परियोजना के लिए एक कार्यस्थान बनाने के लिए (अगर आप यह पहले नहीं किया है।) अपने Xcode कार्यक्षेत्र फ़ाइल की निर्देशिका और निम्न आदेश निष्पादित करें:

open YourProjectName.xcworkspace 

अब तुम सिर्फ "आयात" आपकी फ़ाइलों में से किसी की शुरुआत में AFNetworking की अंतर्निहित एपीआई कार्यक्षमताओं पहुँचने के लिए उपयोग कर सकते हैं।

12

आप AFNetworking 3.0 उपयोग कर रहे हैं, AFJSONRequestOperation अब मौजूद नहीं है, तो आप 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); 
}];