iOS NSJSONSerialization возвращает ноль, если он содержит строку base64 - PullRequest
0 голосов
/ 11 февраля 2020

Мой ответ содержит изображение с base64String.

NSError *jsonError = nil;               
id jSon = [NSJSONSerialization JSONObjectWithData:data options:(0) error:&jsonError];

Текст ошибки:

"Данные не могут быть прочитаны, поскольку они не в правильном формате."

Пожалуйста помогите мне разобрать эти данные.

Если я преобразую ответ, я сломал изображение base64String, то я не могу его загрузить.

NSString *stringData = [[NSString alloc] initWithData:data encoding:(NSUTF8StringEncoding)];  
NSString *str1 = [stringData stringByReplacingOccurrencesOfString:@"\n" withString:@""];  
NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"\\" withString:@""];  
NSString *str = [str2 stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];  
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

jsonError = nil;  
jSon = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];

1 Ответ

2 голосов
/ 11 февраля 2020

Проблема в том, что строка в кодировке base64 содержит linefeed символов, которые должны быть экранированы в строке JSON. Если вы отвечаете за сервер, отправьте строку в кодировке base64 без вставки символа перевода строки после каждых 64 символов.

В противном случае достаточно удалить символы перевода строки

NSString *stringData = [[NSString alloc] initWithData:data encoding:(NSUTF8StringEncoding)];  
NSString *str1 = [stringData stringByReplacingOccurrencesOfString:@"\n" withString:@""];  
NSData *data = [str1 dataUsingEncoding:NSUTF8StringEncoding];

jsonError = nil;  
jSon = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
...