AFNetworking POSTing искаженный JSON - одинарные кавычки и ссылки [Object] - PullRequest
0 голосов
/ 05 марта 2012

Я использую AFNetworking и пытаюсь опубликовать структуру JSON.Проблема в том, что вместо {"my_property":"my value"} он форматируется как {my_property:'my_value'}.Я предполагаю, что потеря первого набора кавычек в большинстве случаев нормальная, но я не уверен, что делать с одиночными кавычками, отличными от JSON, и меня довольно смущает вопрос, почему он вообще генерирует одинарные кавычки, если знаетэто создает JSON из NSDictionary.Кроме того, он включает ссылки на [Object], где я бы ожидал "{".Вот что получает сервер:

...
num_matches: 32,
view_instance: properties_in_view: [Object],
[ { view_instance_ctr: 0, view_id: '4e5bb37258200ed9aa000011' },
...

Цель - iOS 5.0, поэтому я предполагаю, что использует NSJSONSerialization для создания JSON (хотя я не пытался проверить этоеще).Словарь, который я отправляю, проверяет JSON с помощью isValidJSONObject.Если я распечатаю сериализованную версию, она выглядит великолепно.Упрощенная версия кода выглядит следующим образом:

NSDictionary *params = myDictionaryThatValidatesToJSON;
httpClient.parameterEncoding = AFJSONParameterEncoding;
NSMutableURLRequest *request = [httpClient 
     requestWithMethod:@"POST" path:@"" parameters:params];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[operation start];

Я надеюсь, что есть пропавший флаг bigDummy = NO.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2013

Майкл прав.Используя его код данных, я использую это для выполнения запроса POST с параметром JSOn:

// dataDictionary - ваш словарь параметров

    NSError *error = nil;

    NSData* jsonData = [NSJSONSerialization dataWithJSONObject:dataDictionary options:NSJSONWritingPrettyPrinted error:&error];

    //NSString *jsonOut = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];

    AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:webURL]];

    [httpClient setParameterEncoding:AFFormURLParameterEncoding];

    NSMutableURLRequest *request = [httpClient requestWithMethod:@"POST"
                                                            path:@"Webservice URL"
                                                      parameters:nil];

    NSMutableData *body = [NSMutableData data];

    [body appendData:jsonData];

    [request setHTTPBody:body];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json" forHTTPHeaderField:@"content-type"];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    [httpClient registerHTTPOperationClass:[AFHTTPRequestOperation class]];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

        // Print the response body in text

        NSLog(@"Response: %@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);


    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

        NSLog(@"Error: %@", error);


    }];
    [operation start];
0 голосов
/ 05 марта 2012

Я думаю, что ваша проблема на стороне сервера - т.е.отладка, которую вы процитировали в своем вопросе, - это не необработанный текст JSON, полученный сервером, а некоторая переосмысление этого, сделанное некоторым компонентом на сервере.

...