How to serialize UIImage to JSON?

user2181966 picture user2181966 · Aug 19, 2013 · Viewed 9.1k times · Source

I am using

imageData = UIImagePNGRepresentation(imgvw.image);

and while posting

[dic setObject:imagedata forKey:@"image"]; 

after

NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&theError];

now app is crashing Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Invalid type in JSON write (NSConcreteMutableData)

Answer

CodenameLambda1 picture CodenameLambda1 · Aug 19, 2013

You need to convert your UIImage to NSData and then convert that NSData to a NSString which will be base64 string representation of your data.

Once you get the NSString* from NSData*, you can add it to your dictionary at key @"image"

To convert NSData to a base64 type NSString* refer to the following link: How do I do base64 encoding on iphone-sdk?

In a more pseudo-way the process will look like this

UIImage *my_image; //your image handle
NSData *data_of_my_image = UIImagePNGRepresentation(my_image);
NSString *base64StringOf_my_image = [data_of_my_image convertToBase64String];

//now you can add it to your dictionary
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
[dict setObject:base64StringOf_my_image forKey:@"image"];

if ([NSJSONSerialization isValidJSONObject:dict]) //perform a check
{
        NSLog(@"valid object for JSON");
        NSError *error = nil;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];


        if (error!=nil) {
            NSLog(@"Error creating JSON Data = %@",error);
        }
        else{
            NSLog(@"JSON Data created successfully.");
        }
}
else{
        NSLog(@"not a valid object for JSON");
    }