将参数传递给 API 时出现“/”问题

issue with '/' while passing parameter to API

我有以下代码:-

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField
{
    NSData *data = [surveyAnswerForCurrentSurvey dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *answerJson = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSMutableDictionary *answer = [answerJson mutableCopy];

    if([answer valueForKey:question.name] != nil){
        [answer setObject:textField.text forKey:question.name];
    }
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:[answer copy] options:0 error:nil];
    NSLog(@"ns data is %@",jsonData);
    NSString *json = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
    NSLog(@"json string:%@", json);
    NSDictionary *answersDict = @{@"answers_json":json};

    NSData *answersAsData = [NSJSONSerialization dataWithJSONObject: answersDict options:0 error:nil];
    NSString *answersJSONStringify = [[NSString alloc] initWithData: answersAsData encoding:NSUTF8StringEncoding];
    parameters = @{@"survey_answer":answersJSONStringify};

    [self submitSurveyAnswer];

结果是有三个'/',这使得参数在 API 中以不正确的格式传递。

参数:-

{ "survey_answer" = "{\"answers_json\":\"{\\"7d2c591c-9056-405c-9509-03266842b7‌​e5\\":[\\"1\\"],\‌​\"4090442c-90ce-42c‌​2-aae8-7c812b7c0f04\‌​\":\\"test from postman\\",\\"54bdcf13-e500-418a-8bab-d0639e7e1e28\\":\\‌​"2\\",\\"63bb0722-‌​7099-4820-a400-36b89‌​38c6ae8\\":\\"hell‌​o\\",\\"f884a7d1-f‌​9d9-4563-bb6e-945386‌​64f3bd\\":\\"test from cms and iphone\\",\\"ed3acc20-4ae4-493e-ac55-4d2d0f282886\\":\\"‌​1\\"}\"}"; }

这一行

NSDictionary *answersDict = @{@"answers_json":json};

使用一个键创建一个 JSON 对象,该键的值是序列化原始 JSON 对象的字符串结果。字符串中的所有 " 都需要用 \ 转义,所以这就是它的作用,即

{ "answer" : "{ "foo" : "bar" }" }

由于字符串中嵌入引号,因此不合法。所以它这样做:

{ "answer" : "{ \"foo\" : \"bar\" }" }

然后当你打印结果字符串时你会得到反斜杠的乘法,因为反斜杠需要被转义。

要解决此问题,请使用 JSON 对象,而不是其序列化。上面的行变成:

NSDictionary *answersDict = @{@"answers_json": [answer copy]};