0

我正在使用 AFNetworking,并且正在尝试发布 JSON 结构。问题是{"my_property":"my value"},它的格式不是.,而是{my_property:'my_value'}. 我猜在大多数情况下,第一组引号的丢失是可以的,但我不确定如何处理非 JSON 单引号,并且很困惑为什么它会生成单引号,因为它知道它从 NSDictionary 创建 JSON。此外,它还包括 [Object] 引用,我只期望一个“{”。这是服务器得到的:

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

目标是 iOS 5.0,所以我假设它使用 NSJSONSerialization 来创建 JSON(尽管我还没有尝试验证这一点)。我发送的字典使用 isValidJSONObject 验证到 JSON。如果我打印出序列化版本,它看起来很棒。代码的简化版本如下所示:

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

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

我希望有bigDummy = NO一面我失踪的旗帜。

4

2 回答 2

0

我认为您的问题出在服务器端-即。您在问题中引用的调试不是服务器接收到的原始 JSON 文本,而是服务器上的某些组件对此进行了一些重新解释。

于 2012-03-05T07:48:16.923 回答
0

迈克尔是正确的。通过使用他的数据代码,我使用它来执行带有 JSOn 参数的 POST 请求:

// 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];
于 2013-02-27T10:25:14.740 回答