AFNetworkinf 2.0 json
AFNetworkinf 2.0 json
我正在使用 AFnetworking 2.0 Obj-c,我正在使用管理器 POST 方法和 json
问题是 v2.0 的 json 的格式不正确它总是
像
{"data" = "{"name":"name" , "age" :"30"}"}
但是我想要的格式是完整的 json 比如
{"data" : "{"name":"name" , "age" : "30"}"}
我的代码是:
`NSDictionary* dateDic = @{ @"data" : data };
AuthorizationResponse* authResponse = [[AuthorizationResponse alloc] init];
//creating connction manager
//[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
AFJSONRequestSerializer* requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = requestSerializer;
[manager POST:URL parameters:dateDic success:^(AFHTTPRequestOperation* operation, id responseObject) {
onSuccess(responseObject);
} failure:^(AFHTTPRequestOperation* operation, NSError* error) {
//ICityError icity = [[ICityError alloc] init]
ICityErrorItem* errorManager = [[ICityErrorItem alloc] init];
[errorManager setCode:error.code];
[errorManager setDescription:error.description];
onError(errorManager);
}];
dateDic 应该是被解析为 json 的 dic 但它显示了我写的问题
如果你回答,请尝试给我一个代码示例,因为我是 iOS 的新手
提前致谢
参数数据,是字符串吗?
如果你尝试使用这种语法?
NSDictionary *parametros = @{@"data":data};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:url parameters:parametros success:^(AFHTTPRequestOperation *operation, id responseObject) {
for (NSDictionary *nsdValue in responseObject[@"data"]){
NSLog(@"name %@, age %@", nsdValue[@"name"], nsdValue[@"age"]);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
请找到下面的代码,使用 AFNetworking 框架将 JSON 数据从 iOS 发送到 PHP。这里是githublink供参考:Github link
我已经使用 Pod 安装了 AFNetworking。您可以使用 Ray 的 Cocoa Pods link.
您需要在 MAC 机器上设置 XAMPP 服务器才能访问 PHP。从 XAMPP download link
下载 XAMPP 服务器
下载并安装 XAMPP 后。 运行吧。之后转到文件夹:Applications->XAMPP->xamppfiles->htdocs
创建一个名为 - "Testing"
的新文件夹
在 XCode 或任何编辑器中创建一个名为 "testJson.php" 的 PHP 文件。将文件的扩展名保留为 PHP。并将该文件保存在 "Testing" 文件夹中。一旦完成。 运行 来自 XCode 的项目。你会发现你发送的任何数据。您将取回 JSON 中的数据。如果它在控制台上显示为“=”而不是“:”,请不要担心。它是一个 NSDictionary
,您可以使用 valueForKey:
或 valueForKeyPath:
或 objectForKeyPath:
方法获取值。
PHP代码:
<?php
$json = file_get_contents('php://input');
$obj = json_decode($json);
header('Content-Type:application/json');
$jsonencode = json_encode($obj);
echo $jsonencode;
?>
您可以使用 AFNetworking
在 iOS 中通过两种方式发送 JSON 数据
方法一:
- (void)method1
{
// Method 1
AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/plain",@"application/json",@"text/html",nil]];
NSDictionary *dateDic = @{@"data":@{@"name":@"name", @"age":@"40"}};
[manager POST:@"http://localhost/Testing/testJson.php" parameters:dateDic success:^(AFHTTPRequestOperation* operation, id responseObject) {
NSLog(@"response %@",responseObject);
} failure:^(AFHTTPRequestOperation* operation, NSError* error) {
NSLog(@"eror %@",error);
}];
}
方法二:
- (void)method2
{
// Method 2
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/plain",@"application/json",@"text/html",nil]];
NSDictionary *dateDic = @{@"data":@{@"name":@"name", @"age":@"40"}};
[manager POST:@"http://localhost/Testing/testJson.php"
parameters:dateDic
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"response %@",responseObject);
NSDictionary *dict = (NSDictionary *)responseObject;
NSLog(@"dict %@",[dict valueForKeyPath:@"data.age"]);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"eror %@",error);
}];
}
您可以从 viewDidLoad:
中一个一个地调用这两个方法,输出将是相同的。
我正在使用 AFnetworking 2.0 Obj-c,我正在使用管理器 POST 方法和 json
问题是 v2.0 的 json 的格式不正确它总是
像
{"data" = "{"name":"name" , "age" :"30"}"}
但是我想要的格式是完整的 json 比如
{"data" : "{"name":"name" , "age" : "30"}"}
我的代码是:
`NSDictionary* dateDic = @{ @"data" : data };
AuthorizationResponse* authResponse = [[AuthorizationResponse alloc] init];
//creating connction manager
//[AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON)
AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
AFJSONRequestSerializer* requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = requestSerializer;
[manager POST:URL parameters:dateDic success:^(AFHTTPRequestOperation* operation, id responseObject) {
onSuccess(responseObject);
} failure:^(AFHTTPRequestOperation* operation, NSError* error) {
//ICityError icity = [[ICityError alloc] init]
ICityErrorItem* errorManager = [[ICityErrorItem alloc] init];
[errorManager setCode:error.code];
[errorManager setDescription:error.description];
onError(errorManager);
}];
dateDic 应该是被解析为 json 的 dic 但它显示了我写的问题
如果你回答,请尝试给我一个代码示例,因为我是 iOS 的新手 提前致谢
参数数据,是字符串吗?
如果你尝试使用这种语法?
NSDictionary *parametros = @{@"data":data};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:url parameters:parametros success:^(AFHTTPRequestOperation *operation, id responseObject) {
for (NSDictionary *nsdValue in responseObject[@"data"]){
NSLog(@"name %@, age %@", nsdValue[@"name"], nsdValue[@"age"]);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
请找到下面的代码,使用 AFNetworking 框架将 JSON 数据从 iOS 发送到 PHP。这里是githublink供参考:Github link
我已经使用 Pod 安装了 AFNetworking。您可以使用 Ray 的 Cocoa Pods link.
您需要在 MAC 机器上设置 XAMPP 服务器才能访问 PHP。从 XAMPP download link
下载 XAMPP 服务器下载并安装 XAMPP 后。 运行吧。之后转到文件夹:Applications->XAMPP->xamppfiles->htdocs
创建一个名为 - "Testing"
的新文件夹在 XCode 或任何编辑器中创建一个名为 "testJson.php" 的 PHP 文件。将文件的扩展名保留为 PHP。并将该文件保存在 "Testing" 文件夹中。一旦完成。 运行 来自 XCode 的项目。你会发现你发送的任何数据。您将取回 JSON 中的数据。如果它在控制台上显示为“=”而不是“:”,请不要担心。它是一个 NSDictionary
,您可以使用 valueForKey:
或 valueForKeyPath:
或 objectForKeyPath:
方法获取值。
PHP代码:
<?php
$json = file_get_contents('php://input');
$obj = json_decode($json);
header('Content-Type:application/json');
$jsonencode = json_encode($obj);
echo $jsonencode;
?>
您可以使用 AFNetworking
在 iOS 中通过两种方式发送 JSON 数据方法一:
- (void)method1
{
// Method 1
AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/plain",@"application/json",@"text/html",nil]];
NSDictionary *dateDic = @{@"data":@{@"name":@"name", @"age":@"40"}};
[manager POST:@"http://localhost/Testing/testJson.php" parameters:dateDic success:^(AFHTTPRequestOperation* operation, id responseObject) {
NSLog(@"response %@",responseObject);
} failure:^(AFHTTPRequestOperation* operation, NSError* error) {
NSLog(@"eror %@",error);
}];
}
方法二:
- (void)method2
{
// Method 2
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:NSJSONWritingPrettyPrinted];
[manager.responseSerializer setAcceptableContentTypes:[NSSet setWithObjects:@"text/plain",@"application/json",@"text/html",nil]];
NSDictionary *dateDic = @{@"data":@{@"name":@"name", @"age":@"40"}};
[manager POST:@"http://localhost/Testing/testJson.php"
parameters:dateDic
success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"response %@",responseObject);
NSDictionary *dict = (NSDictionary *)responseObject;
NSLog(@"dict %@",[dict valueForKeyPath:@"data.age"]);
}
failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"eror %@",error);
}];
}
您可以从 viewDidLoad:
中一个一个地调用这两个方法,输出将是相同的。