Converting an NSArray of Dictionaries to JSON array in iOS

33,772

Solution 1

NSDictionary *firstJsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"10.010490", @"latitude",
                            @"76.360779", @"longitude",
                            @"30.833334", @"altitude",
                            @"11:17:23", @"timestamp",
                            @"0.00", @"speed",
                            @"0.00", @"distance",
                            nil];

  NSDictionary *secondJsonDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"10.010490", @"latitude",
                            @"76.360779", @"longitude",
                            @"30.833334", @"altitude",
                            @"11:17:23", @"timestamp",
                            @"0.00", @"speed",
                            @"0.00", @"distance",
                            nil];

NSMutableArray * arr = [[NSMutableArray alloc] init];

[arr addObject:firstJsonDictionary];
[arr addObject:secondJsonDictionary];

NSData *jsonData2 = [NSJSONSerialization dataWithJSONObject:arr options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData2 encoding:NSUTF8StringEncoding];
NSLog(@"jsonData as string:\n%@", jsonString);

Solution 2

The simplest and best approach !!!

To convert NSArray or NSMutableArray into jsonString you can first convert it into NSData and then further convert that into a NSString. Use this code

NSData* data = [ NSJSONSerialization dataWithJSONObject:yourArray options:NSJSONWritingPrettyPrinted error:nil ];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

It helped me and hope it helps you as well. All the best.

Solution 3

I would recommend the SBJson-Framework.

Converting an NSMutableArray is as simple as NSString *jsonString = [yourArray JSONRepresentation];

Edit: Jack Farnandish is right u have to transform it into a NSDictionary before you can convert it to Json. In my example the NSMutableArray has to contain the Dictionary. The Array is only needed to create the square brackets at the beginning and the end of the string.

Solution 4

First You must change you structure into NSDictionary class and NSArray containing NSDictionary objects, then try JSONKit in iOS 5 serialization works better than standard NSJSONSerialization.

Solution 5

#import <JSONKit/JSON.h>

NSArray *array = // Your array here.
NSString *json = [array JSONString];

NSLog(@"%@", json);

JSONKit performs significantly better than SBJson and others in my own and the author's benchmarks.

Share:
33,772
iOS Developer
Author by

iOS Developer

Keep steadily before you the fact that all true success depends at last upon yourself.

Updated on September 26, 2020

Comments

  • iOS Developer
    iOS Developer over 3 years

    I need to send an NSArray to the server in the JSON array format. How can I convert it to JSON. This is a sample of my NSArray that I have to pass.

    array([0] => array('latitude'=>'10.010490', 
                      'longitude'=>'76.360779', 
                       'altitude'=>'30.833334', 
                      'timestamp'=>'11:17:23', 
                          'speed'=>'0.00', 
                       'distance'=>'0.00');
    
    [1] => array('latitude'=>'10.010688', 
                'longitude'=>'76.361378', 
                 'altitude'=>'28.546305', 
                'timestamp'=>'11:19:26', 
                    'speed'=>'1.614', 
                 'distance'=>'198.525711')
     )`
    

    and the required format is like this

    [
      { "latitude":"10.010490",
       "longitude":"76.360779",
        "altitude":"30.833334",
       "timestamp":"11:17:23", 
           "speed":"0.00",
        "distance":"0.00"
      },    
      {
       "latitude":"10.010688",
      "longitude":"76.361378",
       "altitude":"28.546305",
      "timestamp":"11:19:26",
          "speed":"1.614",
       "distance":"198.525711" 
      }
    ]
    

    Any one have solution? Thanks in advance.

  • Pradumna Patil
    Pradumna Patil almost 9 years
    It works for me but I want response in array format not in string format.
  • prashant
    prashant almost 9 years
    inline 'code [ { "latitude":"10.010490", "longitude":"76.360779", "altitude":"30.833334", "timestamp":"11:17:23", "speed":"0.00", "distance":"0.00" }, { "latitude":"10.010688", "longitude":"76.361378", "altitude":"28.546305", "timestamp":"11:19:26", "speed":"1.614", "distance":"198.525711" } ] ' you will get it in Array format only
  • brainray
    brainray over 7 years
    This is the correct answer to the question title. Thanks. The accepted answer shows an array of dictionaries
  • brainray
    brainray over 7 years
    Using framework for such a simple task is not really a good idea. Update 2016 RestKit is not a maintained framework any more.