2011-08-14 78 views
0

我正在开发一个iPhone应用程序,我必须以JSON数组格式发布数据,我尝试过并发送它,但没有在后端获取JSON数组。我用来创建和发送我的数组下面的代码:JSON数组格式

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

int score=[[NSNumber numberWithInt:100 ]intValue]; 
int game_id=[[NSNumber numberWithInt:1 ]intValue]; 

NSString *[email protected]"1.1"; 

// Time stamp in Unix format 
int timestamp=[[NSNumber numberWithInt:1312582440]intValue]; 
int elapsed_time=[[NSNumber numberWithInt:500]intValue]; 

int level_reached=[[NSNumber numberWithInt:1 ]intValue]; 

NSString *[email protected]"ios"; 
NSString *[email protected]"801356a3b23c8e2ed94455545ddere"; 

NSString *[email protected]"676c66df9b529895a97cd5f4d55ef"; 

NSLog(@"%@",verification); 


NSMutableDictionary *dict=[[NSMutableDictionary alloc]init]; 

[dict setObject:[NSNumber numberWithInt:score] forKey:@"score"]; 
[dict setObject:[NSNumber numberWithInt:game_id] forKey:@"game_id"]; 
[dict setObject:game_version forKey:@"game_version"]; 
[dict setObject:platform forKey:@"platform"]; 


[dict setObject:[NSNumber numberWithInt:timestamp] forKey:@"timestamp"]; 
[dict setObject:[NSNumber numberWithInt:elapsed_time] forKey:@"elapsed_time"]; 
[dict setObject:hash forKey:@"hash"]; 
[dict setObject:[NSNumber numberWithInt:level_reached] forKey:@"level_reached"]; 
[dict setObject:verification forKey:@"verification"]; 

NSLog(@"%@",dict); 


[playsArr addObject:dict]; 

[request addPostValue:playsArr forKey:@"plays"]; 


[request setTimeOutSeconds:600]; 

[request setDelegate:self]; 
[request setDidFailSelector:@selector(uploadFailed:)]; 
[request setDidFinishSelector:@selector(uploadFinished:)]; 
[request startAsynchronous]; 

现在我从后端获取的评论是,他们没有得到是一个数组,其返回错误或空响应。

我在构建JSON数组格式时出错? 请帮我用代码行......

在此先感谢。

我必须作出这样的结构......

阵列 ( [起着] =>数组 ( [0] => [得分] = 513956 [1] => [ game_id] = 1 [2] => [game_version] = 1.0 [3] => [platform] = Web [4] => [timestamp] = 1313146039 [5] => [elapsed_time] = 400 [ 6] => [hash] = 61e51000143566bfd2e3aefa7cb7b2ad [7] => [level_reached] = 5 [8] => [验证] = e56a35341c8dd44fa082ad678cb11593 ) [模块] =>玩 [动作] =>保存 )

请帮助...

+0

[格式化数组JSON]的可能重复(http://stackoverflow.com/questions/7066543/formatting-an-array-into-json) –

回答

1

你的代码不使用JSON的。根本没有代码可以将数据转换为JSON表示。无论是iOS还是ASIHTTPRequest(您可能会用到而没有提及)都内置了对JSON的支持。

因此,您需要做的是将JSON库(如TouchJSON)添加到您的项目中,并将dict字典转换为JSON表示形式。然后,你把它添加到ASIHTTPRequest作为请求体(而不是作为一个POST值):

NSError *error = NULL; 
NSData *jsonData = [[CJSONSerializer serializer] serializeObject:dict error:&error]; 
[request addRequestHeader: @"Content-Type" value: @"application/json"]; 
[request appendPostData:data]; 

更新:

根据您的更新,我假设你想创建以下JSON数据(你的符号是不是真的我清楚,因为它没有数组和字典之间,因为它似乎有两个数字和字典元素命名键)区分:

{ 
    "plays": [ 
    { 
     "score": 513956, 
     "game_id": 1, 
     "game_version": "1.0", 
     "platform": "Web", 
     "timestamp": 1313146039, 
     "elapsed_time": 400, 
     "hash": "61e51000143566bfd2e3aefa7cb7b2ad", 
     "level_reached": 5, 
     "verification": "e56a35341c8dd44fa082ad678cb11593" 
    } 
    ], 
    "module": "play", 
    "action": "save" 
} 

您可以用它GERATE以下代码:

NSMutableDictionary *dict= [[NSMutableDictionary alloc] init]; 

NSMutableArray *plays = [[NSMutableArray alloc] initWithCapacity:8]; 

NSMutableDictionary *play= [[NSMutableDictionary alloc] init]; 
[play setObject:[NSNumber numberWithInt:score] forKey:@"score"]; 
[play setObject:[NSNumber numberWithInt:game_id] forKey:@"game_id"]; 
[play setObject:game_version forKey:@"game_version"]; 
[play setObject:platform forKey:@"platform"]; 
[play setObject:[NSNumber numberWithInt:timestamp] forKey:@"timestamp"]; 
[play setObject:[NSNumber numberWithInt:elapsed_time] forKey:@"elapsed_time"]; 
[play setObject:hash forKey:@"hash"]; 
[play setObject:[NSNumber numberWithInt:level_reached] forKey:@"level_reached"]; 
[play setObject:verification forKey:@"verification"]; 
[plays addObject:play]; 
[play release]; 

[dict setObject:plays forKey:@"plays"]; 
[plays release]; 

[dict setObject:@"play" forKey:@"module"]; 
[dict setObject:@"save" forKey:@"action"]; 

NSError *error = NULL; 
NSData *jsonData = [[CJSONSerializer serializer] serializeObject:dict error:&error]; 
[request addRequestHeader: @"Content-Type" value: @"application/json"]; 
[request appendPostData:data]; 
+0

请让我知道从哪里我可以得到JSONTouch图书馆? –

+0

对不起:这是TouchJSON,不是JSONTouch。只需在我的答案中点击TouchJSON链接即可。页面顶部有一个下载按钮,页面上还有一些指令。 – Codo

+0

我已经添加了一些代码,以前张贴请帮我做这样的结构 –