iOS:将以下JSON的字符串数组发布到Web服务

时间:2013-10-31 12:01:52

标签: ios json

  1. 如何从“post”网络服务获得以下回复。
  2. 我有一个名为textArray的字符串数组。 如何在下面的响应中将textArray发布到密钥@“Answer”。

          {
            "ProjID": "78",
            "Uid": "12",
            "EmailID": "ratnam_nv@yahoo.com",
            "ProjectInviterFQAnswers": [{
                "slno": "1",
                "Answer": "a1",
                "order": "1",
                "flag": "F"
            }, {
                "slno": "2",
                "Answer": "a1",
                "order": "2",
                "flag": "F"
            }, {
                "slno": "1",
                "Answer": "a1",
                "order": "2",
                "flag": "Q"
            }
            ]
        };
    
  3. 这是我到目前为止所尝试的内容

    NSError *error = Nil;
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    
    
    NSDictionary *dictionaryArray1 = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"slno", @"a1", @"Answer", @"1", @"order", @"F", @"Flag", nil];
    
    NSDictionary *dictionaryArray2 = [NSDictionary dictionaryWithObjectsAndKeys:@"2", @"slno", @"a1", @"Answer", @"1", @"order", @"F", @"Flag", nil];
    
    NSDictionary *dictionaryArray3 = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"slno", @"a1", @"Answer", @"2", @"order", @"Q", @"Flag", nil];
    
    NSArray *arrayAnswer = [NSArray arrayWithObjects:dictionaryArray1, dictionaryArray2, dictionaryArray3, nil];
    
    NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"78", @"ProjID", @"12", @"UID", @"ratnam_nv@yahoo.com", @"EmailID", arrayAnswer, @"ProjectInviterFQAnswer", nil];
    
        NSURL *url = [NSURL URLWithString:@" someurl "];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
        NSData *requestData = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:&error];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        [request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
        [request setHTTPBody: requestData];
        NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
        [connection start];
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
            if(error || !data)
            {
                NSLog(@"JSON Data not posted!");
                [activity stopAnimating];
                UIAlertView *alertMessage = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Data not saved" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alertMessage show];
            }
            else
            {
                [activity startAnimating];
                NSLog(@"JSON data posted! :)");
                NSError *error = Nil;
                NSJSONSerialization *jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error];
                NSLog(@"Response is %@", jsonObject); //Not getting the response here Message = "An error has occurred."
                [activity stopAnimating];
            }
    
        }];
    

2 个答案:

答案 0 :(得分:1)

请小心:

NSArray *keys = [NSArray arrayWithObjects:@"slno", @"Answer", @"order", @"flage", nil];

但你有:

"flag": "Q" 

flage!= flag。

这就是为什么使用常数很好!

接下来,关于你的问题:

首先,您必须将JSON转换为NSDictionary。

后:

NSArray * array = [jsonDict valueForKey:@"ProjectInviterFQAnswer"];
for(NSMutableDictionary * dict in array){
     [dict setValue:<put here anything you want> forKey:@""];
}

执行此操作后,从jsonDict创建一个新的JSON,然后就完成了。

答案 1 :(得分:0)

首先,您必须将响应转换为字典并设置应答textArray字符串的值,然后再将其转换为json字符串