16

我需要以数组格式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" 
  }
]

任何人有解决方案?提前致谢。

4

8 回答 8

51
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);
于 2012-09-06T13:13:03.030 回答
5

最简单最好的方法!!!

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

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

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

于 2016-06-01T14:08:58.583 回答
4

我会推荐SBJson-Framework

转换一个NSMutableArray很简单NSString *jsonString = [yourArray JSONRepresentation];

编辑:Jack Farnandish 是对的,您必须先将其转换为 NSDictionary,然后才能将其转换为 Json。在我的示例中,NSMutableArray 必须包含字典。数组只需要在字符串的开头和结尾创建方括号。

于 2012-09-06T12:26:37.200 回答
2

查看教程,iOS 5.0 中的 JSON 已明确解释(serailization、deserailization)。

于 2012-09-07T09:54:14.273 回答
2

您可以使用 iOS 的内置 JSON 函数或使用外部库(例如JSONKit)将数据转换为 JSON

于 2012-09-06T12:23:50.557 回答
2
#import <JSONKit/JSON.h>

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

NSLog(@"%@", json);

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

于 2012-09-06T12:48:24.273 回答
2

首先,您必须将结构更改为NSDictionary类和NSArray包含NSDictionary对象,然后在 iOS 5 序列化中尝试 JSONKit 比标准的效果更好NSJSONSerialization

于 2012-09-06T12:29:38.170 回答
1

您调用的服务是 RESTful 服务吗?

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

于 2012-09-06T13:55:14.577 回答