Я пытаюсь ПОЧТИПАТЬ несколько простых JSON для службы RESTful. Я хочу, чтобы сформировать строку JSON, которая принимает следующий вид:IOS - Как я могу проверить JSON NSData, созданный SBJson?
{username:"someuser",password:"somepassword"}
Мой пост держит неудачу на сервере жалуясь, что посланном значения не существуют. Однако тот же сервис отлично работает, если я создаю реализацию теста JS. Поэтому я уверен, что проблема с моей клиентской реализацией SBJson является проблемой.
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
userName,@"username",
password, @"password",
nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];
У jsonData, похоже, есть размер, но он пытается сериализовать его с помощью SBJson, и это не так.
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
}
Спасибо .. это действительно возвращает строку json, после которой я буду. Однако setHTTPBody: принимает NSData как параметр. Я взял строку и преобразовал ее в NSData. Проблема остается. Это должно быть причиной чего-то другого во мне. – Nick
Добавлен дополнительный шаг, чтобы показать, как преобразовать его в NSData * – DHamrick