Десериализация Json с целью-c не выполняется на символе авторского права - PullRequest
0 голосов
/ 10 мая 2019

Я в основном разработчик на c #, но мне было поручено устранить ошибку в mac-клиенте target-c. Я использую nsjsonserialization для сериализации объекта json.

Ошибка возникает при десериализации, если объект json содержит символ авторского права.

Мы использовали sbjson, и я переключился на nsjsonserialization, и это не решило проблему. Я не знаю, делаю ли я это неправильно или мне нужно использовать другую библиотеку сериализации. В C # я мог бы просто использовать newtonsoft. Есть ли аналогичная стандартная библиотека сериализации json для target-c, которую я должен использовать?

Вот код сериализации:

-(void)sendMessage:(NSString *)method:(NSDictionary *)inData {
    NSDictionary *outData = [[NSDictionary alloc] init];

    @try {
        JsonServiceComm *newCom = [[JsonServiceComm alloc] init];
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@", host, method]];

        NSData *json = [NSJSONSerialization dataWithJSONObject:inData options:kNilOptions error:nil];
        json = [json subdataWithRange:NSMakeRange(0, [json length] - 1)];
        NSString* jsData = [NSString stringWithUTF8String:[json bytes]];
        NSString *outData  = [newCom userSpaceRequest:url :jsData];

    } @catch (NSException* ex) {
        NSLog(@"%@", [ex reason]);
    }
}

Вот где он десериализуется:

-(void)handleMessage:(NSString *)messageType message:(NSString *)message {
    @autoreleasepool {

        NSData *jsMessage = [message dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error;
        NSDictionary *data = [NSJSONSerialization JSONObjectWithData:jsMessage                                                        options:NSJSONReadingMutableLeaves                                                               error:&error];
}}

Если данные не содержат символа авторского права, * данные заполняются словарем значений, однако, если они содержат символ авторского права, * данные выходят равными нулю. Возвращенная ошибка: «Неожиданный конец файла при разборе объекта».

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Это решено. Я обнаружил, что json пропускается через отдельный анализатор json, где он не кодируется в utf8.

0 голосов
/ 10 мая 2019

Попробуйте использовать параметры: 0 вместо параметров: NSJSONReadingMutableLeaves

https://developer.apple.com/documentation/foundation/nsjsonreadingoptions/nsjsonreadingmutableleaves?language=objc

...