[英]IOS - How can I inspect the JSON NSData the SBJson creates?
I am attempting to POST some simple JSON to a RESTful service. 我正在尝试将一些简单的JSON发布到RESTful服务。 I want to form a json string that takes the following form:
我想形成一个采用以下形式的json字符串:
{username:"someuser",password:"somepassword"}
My POST keeps failing at the server complaining that POSTed values do not exist. 我的POST在服务器上一直失败,抱怨POST值不存在。 However the same service works fine if I create a JS test implementation.
但是,如果我创建JS测试实现,则相同的服务可以正常工作。 So I'm pretty sure its my SBJson client implementation that is the problem.
所以我很确定这是我的SBJson客户端实现。
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
userName,@"username",
password, @"password",
nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];
jsonData appears to have size but it attempt to serialize it with SBJson its fails and I get nil. jsonData似乎有大小,但是它尝试使用SBJson对其进行序列化,但失败了,我得到nil。
NSString *test = [writer stringWithObject:jsonData]; // returns nil
I am trying to post the above in a NSMutableURLRequest. 我正在尝试将以上内容发布到NSMutableURLRequest中。 Here's my implementation if it helps give context:
如果可以帮助提供上下文,这是我的实现:
-(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];
Thanks! 谢谢!
update 更新
Using the suggestions below I am now doing this: 使用下面的建议,我现在这样做:
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];
Unfortunately my posted values are still not found at the server. 不幸的是,在服务器上仍找不到我发布的值。 I think something must be wrong with my NSMutableURLRequest..
我认为我的NSMutableURLRequest一定有问题。
I am using CodeIgniter on the backend. 我在后端使用CodeIgniter。 The action looks like this:
该动作如下所示:
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
}
To serialize the dictionary userDict
call the following method. 要序列化字典
userDict
请调用以下方法。
NSString* jsonString = [userDict JSONRepresentation];
If you want the NSData representation you can use the following method 如果要使用NSData表示形式,可以使用以下方法
NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8Encoding];
try this: 尝试这个:
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
userName,@"username",
password, @"password",
nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSString *test = [writer stringWithObject:userDict];
don't forget to release them 别忘了释放它们
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.