将参数传递给 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-03266842b7e5\\":[\\"1\\"],\\"4090442c-90ce-42c2-aae8-7c812b7c0f04\\":\\"test from postman\\",\\"54bdcf13-e500-418a-8bab-d0639e7e1e28\\":\\"2\\",\\"63bb0722-7099-4820-a400-36b8938c6ae8\\":\\"hello\\",\\"f884a7d1-f9d9-4563-bb6e-94538664f3bd\\":\\"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]};
我有以下代码:-
- (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-03266842b7e5\\":[\\"1\\"],\\"4090442c-90ce-42c2-aae8-7c812b7c0f04\\":\\"test from postman\\",\\"54bdcf13-e500-418a-8bab-d0639e7e1e28\\":\\"2\\",\\"63bb0722-7099-4820-a400-36b8938c6ae8\\":\\"hello\\",\\"f884a7d1-f9d9-4563-bb6e-94538664f3bd\\":\\"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]};