2015-08-22 7 views
6

मैं कुछ डेटा के साथ ऑडियो पोस्ट करने के लिए AFNetworking का उपयोग कर रहा हूं। मुझे निम्नलिखित अपवाद मिल रहा है।JSON लिखने में अवैध प्रकार (NSConcreteData)?

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSConcreteData)' 

मैं इस कोड का उपयोग कर रहा ..

[email protected]{@"access_token":[defaults valueForKey:@"TOKEN"],@"email":email,@"prayer":passData}; 

if ([NSJSONSerialization isValidJSONObject:dict]) { 
     NSLog(@"Proper JSON Object"); 

    } 
    NSError *error; 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error]; 

    NSURL *URL = [NSURL URLWithString:url]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL 
                  cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 

    [request setHTTPMethod:@"POST"]; 
    [request setValue: @"application/json" forHTTPHeaderField:@"Content-Type"]; 
    [request setHTTPBody:jsonData]; 
AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    op.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {} 

मैं

{ 
    "access_token" = 2cf0d8a66654fa4f; 
    email = ""; 
    prayer =  { 
     audio = <63616666 00010000 64657363 00000000 00000020 40e58880 00000000 696d6134 00000000 00000044 00000040 00000002 00000000 6b756b69 00000000 00000000 66726565 0000000> 
98903013 31faae9c bb7b0780 80808080>; 
     "category_id" = ""; 
     description = ""; 
     "expired_date" = "Expiration Date"; 
     "is_audio" = 1; 
     "is_urgent" = 0; 
     "prayer_access_id" = ""; 
     "prayer_type_id" = 1; 
     subject = ""; 
    }; 
} 

मैं नहीं जानता कि क्यों यह हो रहा है, मैं पोस्ट किया है मानों इस प्रारूप में मूल्यों पोस्ट करने के लिए की जरूरत है इस प्रारूप से पहले, लेकिन जब मैं डेटा को डेटा के रूप में पोस्ट करने का प्रयास करता हूं, तो मुझे यह अपवाद मिल रहा है। अग्रिम

संपादित

यहाँ धन्यवाद मैं डेटा

NSData *audioFile=[self audioData]; 
if (audioFile==nil) { 
     [passData setObject:@"" forKey:@"audio"]; 
     [passData setObject:@"0" forKey:@"is_audio"]; 

    }else{ 

     [passData setObject:audioFile forKey:@"audio"]; 
     [passData setObject:@"1" forKey:@"is_audio"]; 
    } 


-(NSData *)audioData{ 
    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(
                  NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *docsDir = [dirPaths objectAtIndex:0]; 
    NSString *soundFilePath = [docsDir 
           stringByAppendingPathComponent:@"recordTest.caf"]; 

    NSURL *url = [NSURL fileURLWithPath:soundFilePath]; 
    NSData *audioData=[NSData dataWithContentsOfURL:url]; 
    return audioData; 
} 

बनाने रहा हूँ यह है कि क्या मैं ऑडियो फ़ाइल

+0

दिखाएं कि पासडेटा प्रारंभिकरण। – Shoaib

+0

@ शोएब रीप्ले के लिए धन्यवाद मैंने व्यूडिडलोड विधि पोस्टडाटा = [NSDictionary शब्दकोश] में initlized किया है; passData = [NSMutableDictionary शब्दकोश]; – karthikeyan

+0

पासडाटा शब्दकोश में उस ऑडियो कुंजी का डेटा प्रकार क्या है? असल में, मैं देखना चाहता हूं कि आपने अपने शब्दकोश में किस प्रकार का डेटा डाला है। – Shoaib

उत्तर

17

समस्या यह है कि आप JSON में NSData नहीं डाल सकते हैं। audioNSData है। NSJSONSerializationdocumentation कहते हैं:

एक वस्तु है कि JSON करने के लिए परिवर्तित किया जा सकता है निम्नलिखित गुण होना चाहिए:

  • शीर्ष स्तर वस्तु एक NSArray या NSDictionary है।

  • सभी वस्तुओं NSString, NSNumber, NSArray, NSDictionary, या NSNull के उदाहरण हैं।

  • सभी शब्दकोश कुंजी NSString के उदाहरण हैं।

  • नंबर NaN या अनंत नहीं हैं।

आप JSON में NSData शामिल करना चाहते हैं, तो आप इसे एक स्ट्रिंग में कनवर्ट करने के लिए है। ऐसा करने का सामान्य तरीका बेस 64 को एन्कोड करना है (और फिर, गंतव्य में, बेस 64 स्ट्रिंग को डीकोड करें)।

+0

एफडब्ल्यूआईडब्ल्यू, स्विफ्ट की ['JSONEncoder'] (https: //developer.apple.com/documentation/foundation/jsonencoder) एक ['dataEncodingStrategy'] (https://developer.apple.com/documentation/foundation/jsonencoder/2895381-dataencodingstrategy) की अनुमति देता है और '.base64' पर डिफ़ॉल्ट करता है। – Rob

0

डालने कर रहा हूँ आप अपने Json पाठ में एक सिंटैक्स त्रुटि है। इसे http://www.jsoneditoronline.org पर जांचें और जब आप सुनिश्चित हों कि यह सही है तो यह सुनिश्चित करें कि जेसन

+0

टिप्पणी के लिए धन्यवाद, मुझे जेसन प्रारूप बनाने में कोई समस्या नहीं है, मुझे लगता है कि जेसन बनाने के दौरान ऑडियो डेटा के साथ समस्या है, इसलिए मुझे बेस एन्कोडिंग ऑडियो डेटा करना होगा। उपयोगी लिंक – karthikeyan

संबंधित मुद्दे