gpt4 book ai didi

iphone - IOS - 如何检查 SBJson 创建的 JSON NSData?

转载 作者:行者123 更新时间:2023-11-28 20:39:03 25 4
gpt4 key购买 nike

我正在尝试将一些简单的 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 似乎有大小,但它试图用 SBJ 序列化它失败,我得到 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。 Action 看起来像这样:

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
}

最佳答案

要序列化字典 userDict 调用以下方法。

NSString* jsonString = [userDict JSONRepresentation];

如果你想要 NSData 表示,你可以使用下面的方法

NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8Encoding];

关于iphone - IOS - 如何检查 SBJson 创建的 JSON NSData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9342573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com