我正在尝试将一些简单的JSON发布到RESTful服务。我想形成一个json字符串,采用以下形式:
{username:"someuser",password:"somepassword"}
我的POST一直在服务器上失败,抱怨POSTed值不存在。但是,如果我创建一个JS测试实现,相同的服务工作正常。所以我很确定我的SBJson客户端实现是问题所在。
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
userName,@"username",
password, @"password",
nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];
jsonData似乎有大小,但它试图用SBJson序列化它失败了,我得到了nil。
NSString *test = [writer stringWithObject:jsonData]; // returns nil
我试图在NSMutableURLRequest中发布上述内容。这是我的实现,如果它有助于提供上下文:
-(void)registerUserName:(NSString *)userName andPassword:(NSString *)password{
responseData = nil;
responseData = [NSMutableData data];
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
userName,@"username",
password, @"password",
nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];
NSString *test = [writer stringWithObject:jsonData]; //always nil
NSURL *url = [[NSURL alloc] initWithString:@"http://localhost/~user/app_web/index.php/user/create"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request addValue:@"form-data" forHTTPHeaderField:@"Content-Disposition"];
[request setHTTPBody:jsonData];
[[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES ];
currentRequestType = REGISTER_USER;
NSURLConnection *connection =[[NSURLConnection alloc]initWithRequest:request delegate:self];
谢谢!
更新
使用以下建议我现在正在这样做:
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
userName,@"username",
password, @"password",
nil];
NSString *jsonString = [userDict JSONRepresentation];
NSData *jsonData = [jsonString dataUsingEncoding];
[request setHTTPBody:jsonData];
[[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES ];
currentRequestType = REGISTER_USER;
NSURLConnection *connection =[[NSURLConnection alloc]initWithRequest:request delegate:self];
不幸的是,在服务器上仍未找到我发布的值。我认为我的NSMutableURLRequest一定有问题。
我在后端使用CodeIgniter。行动如下:
public function create(){
if($this->input->post('username') && $this->input->post('password')){
$username = $this->input->post('username');
$password = $this->input->post('password');
$this->load->model('User_model','users');
$status = $this->users->add_user($username,$password);
if($status){
echo json_encode(array('success'=>true));
} else{
echo json_encode(array('success'=>false));
}
}
echo json_encode(array('success'=>false)); // when posting I arrive here
}
答案 0 :(得分:2)
要序列化字典userDict
,请调用以下方法。
NSString* jsonString = [userDict JSONRepresentation];
如果需要NSData表示,可以使用以下方法
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8Encoding];
答案 1 :(得分:1)
试试这个:
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
userName,@"username",
password, @"password",
nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSString *test = [writer stringWithObject:userDict];
不要忘记发布它们