在iOS中将字典的NSArray转换为JSON数组

时间:2012-09-06 12:17:58

标签: iphone json cocoa cocoa-touch nsarray

我需要以NSArray数组格式向服务器发送JSON。如何将其转换为JSON。这是我必须传递的NSArray样本。

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')
 )`

,所需格式如下

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

有人有解决方案吗?提前谢谢。

8 个答案:

答案 0 :(得分:50)

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

答案 1 :(得分:5)

最简单,最好的方法!!!

要将NSArray或NSMutableArray转换为jsonString,您可以先将其转换为NSData,然后再将其转换为NSString。使用此代码

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

它帮助了我,并希望它也能帮到你。祝一切顺利。

答案 2 :(得分:4)

我会推荐SBJson-Framework

转换NSMutableArray就像NSString *jsonString = [yourArray JSONRepresentation];

一样简单

编辑:Jack Farnandish是对的,你必须将它转换为NSDictionary才能将它转换为Json。在我的例子中,NSMutableArray必须包含Dictionary。仅需要在字符串的开头和结尾处创建方括号。

答案 3 :(得分:2)

您可以使用iOS的build in JSON functions或使用外部资料库,例如JSONKit将您的数据转换为JSON

答案 4 :(得分:2)

首先您必须将结构更改为包含NSDictionary个对象的NSArray类和NSDictionary,然后尝试在iOS 5序列化中使用JSONKit,而不是标准NSJSONSerialization

答案 5 :(得分:2)

#import <JSONKit/JSON.h>

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

NSLog(@"%@", json);

JSONKit在我自己和作者的基准测试中表现明显优于SBJson和其他人。

答案 6 :(得分:2)

检查this教程,明确解释了iOS 5.0中的JSON(序列化,反序列化)。

答案 7 :(得分:1)

您正在调用RESTful服务吗?

如果是这样,我强烈建议使用RestKit。它确实对象序列化/反序列化。它还处理所有网络基础。非常有价值,维护良好。