AFNetworkin POST Json格式的数据到服务器

本文介绍了如何在Objective-C中处理JSON格式的数据,并将其通过POST请求发送到服务器。首先展示了JSON数据的结构,然后演示了将字典类型转换成JSON的方法,并以登录为例阐述了具体实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下json格式为:

 "Method" : "ClientLogin",

  "RunnerIP" : "",

  "Detail" : [

    {

      "UserName" : "lanxijin",

      "Pwd" : "ac59075b964b0715"

    }

  ],

  "WebSite" : "community",

  "RunnerUserID" : "0",

  "Class" : "Login"

讲这和一段json格式post服务器。

首先我们得到的值是字典类型,需要将字典类型转换成json

如下方法转换:

-(NSString*)DataTOjsonString:(id)object
{
    NSString *jsonString = nil;
    NSError *error;
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object
                                                       options:NSJSONWritingPrettyPrinted // Pass 0 if you don't care about the readability of the generated string
                                                         error:&error];
    if (! jsonData) {
        NSLog(@"Got an error: %@", error);
    } else {
        jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    }
    return jsonString;
}


然后通过 AFHTTPRequestOperationManager来做post操作

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer  = [AFJSONRequestSerializer serializer];
    
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept" ];
    [manager.requestSerializer setValue:@"application/json; charset=gb2312" forHTTPHeaderField:@"Content-Type" ];
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json",@"text/html", @"text/plain",nil];
    
    /**
     *  parameters最外层参数类型是一个字典,字典里面接受一接受一个数组"detailArr"(其中detailArr中添加一个字典对象)
     */
    NSDictionary *detailDic = @{@"UserName":@"lanxijin",@"Pwd":@"ac59075b964b0715"};
    NSMutableArray *detailArr = [[NSMutableArray alloc]init];
    [detailArr addObject:detailDic];
    NSDictionary *parameters = @{@"Class":@"Login",@"Method":@"ClientLogin",@"WebSite":@"community",@"RunnerUserID":@"0",@"RunnerIP":@"",@"Detail":detailArr};
    
    //讲字典类型转换成json格式的数据,然后讲这个json字符串作为字典参数的value传到服务器
    NSString *jsonStr = [self DataTOjsonString:parameters];
    NSLog(@"jsonStr:%@",jsonStr);
    NSDictionary *params = @{@"ios":(NSString *)jsonStr}; //服务器最终接受到的对象,是一个字典,key为“ios”,value为“json字符串”
    
    NSString *url=@"http://XXXXXXXXX";
    [manager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
        
        //服务器默认返回的是一个NSData类型,需要将返回的这个类型转换成你所需要的类型,一般是id
        
        id result = [responseObject JSONValue];
        NSLog(@"result:%@",result); //最后得到服务器返回的正确数据
        
        //测试服务器数据是否正常
        NSArray *arr = [result objectForKey:@"Detail"];
        for (int i = 0; i < arr.count; i ++) {
            NSDictionary *dic = [arr objectAtIndex:i];
            NSString *mobile = [dic objectForKey:@"mobile"];
            NSLog(@"mobiles:%@",mobile);
        }
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error: %@", error);
    }];
最后输出结果如下:

 result:{

    Class = Login;

    Detail =     (

                {

            address = dsggds;

            area = "";

            city = "";

            createtime = "2015/11/10 16:20:16";

            id = 2;

            isbbs = 0;

            ishotnews = 0;

            ismessagepush = 0;

            isshow = 888;

            landdate = "2015/11/16 0:56:07";

            landnum = 89;

            lasttime = "2015/11/10 16:20:16";

            mobile = 13819118514;

            nickname = lanxijin;

            password = ac59075b964b0715;

            picture = "";

            picturedomain = "";

            province = "";

            success = 2;

            totalscore = "";

            username = lanxijin;

        }

    );

    Method = ClientLogin;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值