0

大家好,我正在使用 NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil] 命令来编写 json。它看起来不错,当我发布到 Rails 服务器时,“名字”仍然存在。任何人都可以帮助

NSArray *objects = [NSArray arrayWithObjects:@"firstname", @"lastname",nil];
NSArray *keys = [NSArray arrayWithObjects:@"dave", @"lu", nil];
NSDictionary *questionDict = [NSDictionary dictionaryWithObjects:keys forKeys:objects];


NSArray *objects2 = [NSArray arrayWithObjects:@"utf8", 
                                @"authenticity_token",@"check_i_ndatum", @"commit",nil];
NSArray *keys2 = [NSArray arrayWithObjects:@"1", @"xx",questionDict,@"Create Check i 
                                                                          Nadtum", nil];
NSDictionary *jsonDict = [NSDictionary dictionaryWithObjects:keys2 forKeys:objects2];

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict 
                                          options:NSJSONWritingPrettyPrinted error:nil];


NSURL * url =[NSURL URLWithString:@"http://192.168.1.105:3000/check_i_ndata"];
 //the request

NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:url    
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//bind req w/ json
[request setHTTPMethod:@"POST"];
//[request setValue:@"check_i_ndata" forHTTPHeaderField:@"Accept"];
[request setValue:[NSString stringWithFormat:@"%d",[jsonRequestData length]] 
forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:jsonRequestData];

NSURLResponse * response = nil;
NSError *error =nil;
NSData *reslut =[NSURLConnection sendSynchronousRequest:request 
returningResponse:&response error:&error];

输出->>>>在xcode中

  {
  "commit" : "Create Check i Nadtum",
  "authenticity_token" : "xx",
  "utf8" : "1",
  "check_i_ndatum" : {
    "firstname" : "dave",
    "lastname" : "lu"
  }
}

输出 ->>> 在 Rails 服务器上

Started POST "/check_i_ndata" for 192.168.1.100 at 2012-07-29 10:25:37 -0700
Processing by CheckINdataController#create as */* 
Parameters: {"{\n  \"commit\" : \"Create Check i Nadtum\",\n \"authenticity_token\" : 
\"xx\",\n  \"utf8\" : \"1\",\n\"check_i_ndatum\" : {\n    \"firstname\" : \"dave\",\n
\"lastname\" : \"lu\"\n  }\n}"=>nil}

应该看起来像这样 ->>> 在 Rails 服务器上

{"utf8"=>"✓", "authenticity_token"=>"XtLdI2lWSfO6OL8OwZ9Kai+Cm7hFe16EH50zPfheGbs=",
"check_i_ndatum"=>{"firstname"=>"sdf", "lastname"=>"asdf",
"medicalID"=>"adsf", "checkedInDate(1i)"=>"2012",
"checkedInDate(2i)"=>"7", "checkedInDate(3i)"=>"29",
"checkinTime(1i)"=>"2012", "checkinTime(2i)"=>"7",
"checkinTime(3i)"=>"29", "checkinTime(4i)"=>"08",
"checkinTime(5i)"=>"40"}, "commit"=>"Create Check i ndatum"}
4

1 回答 1

5

您没有在您的帖子请求中设置内容类型,因此它最终被解释为普通格式编码的帖子。

将 Content-Type 标头设置为 application/json 之类的内容应该会导致 rails 将请求解析为 json

例如,对于上面的代码,这可能看起来像:

[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
于 2012-07-29T17:46:58.683 回答