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: 中一个一个地调用这两个方法,输出将是相同的。