2012-05-15 1 views
0

Можно создать дубликат:
Send json to php using ASIFormDataRequestполучить NSMuatbleArray от iPhone до PHP, используя почту и отвечать

Я новичок в Objective-C и развитие IOS.

Я хочу отправить NSMutableArray на PHP с iPhone, а затем вернуть его обратно и распечатать с помощью NSLog, чтобы убедиться, что этот массив успешно отправлен.

Я использовал следующий код:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    NSString *phpUrl = @"http://dt-works.com/eman/bookMarks.php"; 

    NSMutableArray *arrayKey = [[NSMutableArray alloc] initWithObjects:@"one", @"two", @"three", nil]; 
    NSMutableArray *arrayValue1 = [[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil]; 
    NSMutableArray *arrayValue2 = [[NSMutableArray alloc] initWithObjects:@"11", @"22", @"33", nil]; 

    NSDictionary *theReqDictionary1 = [NSDictionary dictionaryWithObjects:arrayValue1 forKeys:arrayKey]; 
    NSDictionary *theReqDictionary2 = [NSDictionary dictionaryWithObjects:arrayValue2 forKeys:arrayKey]; 

    NSMutableArray *myArray = [NSMutableArray arrayWithObjects:theReqDictionary1,theReqDictionary2, nil]; 

    NSString *jsonString = [myArray JSONRepresentation]; 

    NSLog(@"%@", jsonString); 


    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:phpUrl]]; 

    NSString *post = [[NSString alloc] initWithFormat:@"jsonString=%@&submit=", jsonString]; 
    //NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:NO]; 

    [request setHTTPMethod:@"POST"]; 

    [request setHTTPBody:[post dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]]; 


    SBJsonParser *parser = [[SBJsonParser alloc] init]; 

    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

    NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 

    NSArray *statuses = [parser objectWithString:json_string error:nil]; 
    int arraySize = [statuses count]; 

    NSMutableArray *number = [[NSMutableArray alloc] init]; 

    for (NSDictionary *status in statuses) 
    { 

     NSString *onee = [status objectForKey:@"one"]; 
     NSString *twoo = [status objectForKey:@"two"]; 
     NSString *threee = [status objectForKey:@"three"]; 


     [number addObject:status]; 

     NSLog(@"------------------ from browser-----------------------------------"); 
     NSLog(@"myOne %@ - myTwo: %@ - myThree: %@ ",onee ,twoo, threee); 

    } 

    NSLog(@"size of array is: %d", arraySize); 
    NSLog(@"size of them is: %d", [number count]); 
} 

В PHP я написал следующий код:

<?php 
    header('Content-type:text/html;charset=utf-8'); 
    if (isset($_POST['submit'])) { 
     $jsonString = $_POST['jsonString']; 
     print_r($jsonString); 
    } 
?> 

выход является:

[{"one":"1","two":"2","three":"3"},{"one":"11","two":"22","three":"33"}] 

size of array is: 0 

size of them is: 0 

и размер массива должен быть 2, что случилось в моем коде ???

ответ

1

Возможно, вам нужно использовать json_decode перед печатью?

+0

Я думаю, что json_decode преобразует json в массив, я не хочу его декодировать, я хочу, чтобы он был [{«один»: «1», «два»: «2», «три»: «3 "}, {" one ":" 11 "," two ":" 22 "," three ":" 33 "}], чтобы проанализировать его снова и вывести его размер –

+0

использовать json_decode для ввода результата в массив, а затем использовать «count» php function знать размер –

+0

как использовать функцию count php в коде iPhone ??? потому что я хочу получить размер в nslog –

0

Начало работы с var_dump в PHP вместо print_r. Затем decode the JSON object!

Update
После вашего

[...] 
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding]; 
[...] 

Добавьте следующее:

SBJSON *json = [SBJSON new]; 
NSError *jsonError; 
NSDictionary *parsedJSON = [json objectWithString:json_string error:&jsonError]; 

int arraySize = [parsedJSON count]; 

NSMutableArray *number = [[NSMutableArray alloc] init]; 

for (NSDictionary *status in parsedJSON) 
{ 

    NSString *onee = [status objectForKey:@"one"]; 
    NSString *twoo = [status objectForKey:@"two"]; 
    NSString *threee = [status objectForKey:@"three"]; 


    [number addObject:status]; 

    NSLog(@"------------------ from browser-----------------------------------"); 
    NSLog(@"myOne %@ - myTwo: %@ - myThree: %@ ",onee ,twoo, threee); 

} 

Я думаю, что могла бы работать. Бит на макушке, но попробуйте.

+0

Я думаю, что json_decode преобразует json в массив, я не хочу его декодировать, я хочу, чтобы это было как [{"one": "1", "two": "2" , «три»: «3»}, {«один»: «11», «два»: «22», «три»: «33»}], чтобы проанализировать его снова и вывести его размер, который должен быть 2 –

+0

Я вас не понимаю, что вы хотите снова разобрать? У вас теперь закодированная строка JSON ... вы хотите отправить ее обратно в приложение как объект json? –

+0

да, потому что я не нашел способ гарантировать, что массив был отправлен на php, поэтому я использую синтаксический анализ, чтобы убедиться, что он был отправлен. –

Смежные вопросы