Convert an iOS objective c object to a JSON string Convert an iOS objective c object to a JSON string ios ios

Convert an iOS objective c object to a JSON string

EDIT: I have made a dummy app that should be a good example for you.

I create a Message class from your code snippet;

//Message.h@interface Message : NSObject {    NSString *from_;    NSString *date_;    NSString *msg_;}@property (nonatomic, retain) NSString *from;@property (nonatomic, retain) NSString *date;@property (nonatomic, retain) NSString *msg;-(NSDictionary *)dictionary;@end//Message.m#import "Message.h"@implementation Message@synthesize from = from_;@synthesize date = date_;@synthesize msg = mesg_;-(void) dealloc {    self.from = nil; = nil;    self.msg = nil;    [super dealloc];}-(NSDictionary *)dictionary {    return [NSDictionary dictionaryWithObjectsAndKeys:self.from,@"from",,    @"date",self.msg, @"msg", nil];}

Then I set up an NSArray of two messages in the AppDelegate. The trick is that not only does the top level object (notifications in your case) need to be serializable but so do all the elements that notifications contains: Thats why I created the dictionary method in the Message class.

//AppDelegate.m...Message* message1 = [[Message alloc] init];Message* message2 = [[Message alloc] init];message1.from = @"a"; = @"b";message1.msg = @"c";message2.from = @"d"; = @"e";message2.msg = @"f";NSArray* notifications = [NSArray arrayWithObjects:message1.dictionary, message2.dictionary, nil];[message1 release];[message2 release];NSError *writeError = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:notifications options:NSJSONWritingPrettyPrinted error:&writeError];NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; NSLog(@"JSON Output: %@", jsonString);@end

The output when I run the application is thus:

2012-05-11 11:58:36.018 stack[3146:f803] JSON Output: [ { "msg" : "c", "from" : "a", "date" : "b" }, { "msg" : "f", "from" : "d", "date" : "e" }]


Is this the documentation you are looking for?

Now you can solve this problem easily using JSONModel. JSONModel is a library that generically serialize/deserialize your object based on Class. You can even use non-nsobject based for property like int, short and float. It can also cater nested-complex JSON. It handles error checking for you.

Deserialize example. in header file:

#import "JSONModel.h"@interface Message : JSONModel @property (nonatomic, strong) NSString* from;@property (nonatomic, strong) NSString* date;@property (nonatomic, strong) NSString* message;@end

in implementation file:

#import "JSONModelLib.h"#import "yourPersonClass.h"NSString *responseJSON = /*from somewhere*/;Message *message = [[Message alloc] initWithString:responseJSON error:&err];if (!err){   NSLog(@"%@  %@  %@", message.from,, message.message):}

Serialize Example. In implementation file:

#import "JSONModelLib.h"#import "yourPersonClass.h"Message *message = [[Message alloc] init];message.from = @"JSON beast"; = @"2012";message.message = @"This is the best method available so far";NSLog(@"%@", [person toJSONString]);

Note: This will only work with serializable objects. This answer was provided above in an edit to the question itself, but I always look for answers in the "answers" section myself ;-)

- (NSString*) convertObjectToJson:(NSObject*) object{    NSError *writeError = nil;    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:&writeError];    NSString *result = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];    return result;}