iOS JSON Parse не работает (возвращает нулевой словарь)

Я использую параметры NSJSONSerialization JSONObjectWithData:data options: error: для анализа данных JSON, возвращаемых с сервера.

Теперь для параметра options я использую: NSJSONReadingAllowFragments . Вы можете посмотреть ниже и увидеть фактический JSON (где я считаю, что проблема есть).

Сообщение об ошибке, которое я получаю:

Error Domain = NSCocoaErrorDomain Code = 3840 «Операция не может быть выполнена (ошибка Cocoa 3840.)» (недопустимое значение вокруг символа 0.) UserInfo = 0x6895da0 {NSDebugDescription = Недопустимое значение вокруг символа 0.}

Любая идея, как это исправить?

JSON =

 {"name":"Johan Appleseed", "email":"j.appleseed@emuze.co", "phone":"+4121876003", "accounts":{ "facebook":[true,1125], "twitter":[false,null], "homepage":[true,"http:\/\/johnAplleseed.com\/index.html"]}} 

6 Solutions collect form web for “iOS JSON Parse не работает (возвращает нулевой словарь)”

Возможно, у вас есть нецензурный персонаж, которого вы не видите. Попробуй это:

 NSData *jsonData = ... const unsigned char *ptr = [data bytes]; for(int i=0; i<[data length]; ++i) { unsigned char c = *ptr++; NSLog(@"char=%c hex=%x", c, c); } 

Чтобы убедиться, что у вас нет непечатаемых символов в начале или конце данных.

EDIT: уточнить, просто запустите выше в своем словаре JSON – тот, который не разобрался.

Ive acctualy обнаружил, что проблема заключается в том, что возврат из URL-адреса является HTML-страницей, и там все эти теги html, head и body вокруг фактического ответа, поэтому его нельзя разобрать. Это хорошее Q & A о том, как удалить теги HTML из ответа (после того, как он был изменен в строку): Удалить HTML-теги из NSString на iPhone

У меня была та же проблема на некоторое время, я просто понял, что, если я вытаскиваю данные с веб-страницы, скажем, страницы PHP, не должно быть никаких HTML-тегов на этой странице. Итак, структура вроде:

 <html> <body> <?php ?> </body> </html> 

разрушит ваш результат. превращая его в:

 <?php ?> 

работал на меня.

Прошло некоторое время, но более простой способ печати данных:

NSLog (@ "% @", [[NSString alloc] initWithData: кодирование данных: NSUTF8StringEncoding]);

Один из способов, вы можете разобрать jsondata по запросу

  -(void)callWebserviceList { spinner.hidden=NO; NSString *bodyData = @"code_request=monuments_list&asi_id=1"; NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://asicircles.com/server_sync.php"]]; // Set the request's content type to application/x-www-form-urlencoded [postRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; // Designate the request a POST request and specify its body data [postRequest setHTTPMethod:@"POST"]; [postRequest setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]]; 

connection1 = [Соединение NSURLConnectionWithRequest: postRequest delegate: self];

 if(connection1 !=nil) { ////NSLog(@"%@",postRequest); } 

}

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { if ([connection isEqual:connection1 ]) { [responseData setLength:0]; }else if ([connection isEqual:connection2 ]) { [responseData1 setLength:0]; } 

} – (void) соединение: (NSURLConnection *) connection didReceiveData: (NSData *) data {

  if ([connection isEqual:connection1 ]) { [responseData appendData:data]; }else if ([connection isEqual:connection2 ]) { [responseData1 appendData:data]; } //**check here for responseData & also data** 

}

 - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"%@",[NSString stringWithFormat:@"Connection failed: %@", [error description]]); } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { if ([connection isEqual:connection1 ]) { spinner.hidden=YES; NSError *error; NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; NSMutableArray *arrdata=[json objectForKey:@"message"]; NSLog(@"code is%@", json); for (int i=0; i< arrdata.count; i++) { [arrDetails addObject:[[arrdata objectAtIndex:i]objectForKey:@"details"]]; [arrImageUrl addObject:[[arrdata objectAtIndex:i]objectForKey:@"image"]]; [arrLat addObject:[[arrdata objectAtIndex:i]objectForKey:@"lat"]]; [arrLongi addObject:[[arrdata objectAtIndex:i]objectForKey:@"longi"]]; [arrName addObject:[[arrdata objectAtIndex:i]objectForKey:@"name"]]; [arrLoc addObject:[[arrdata objectAtIndex:i]objectForKey:@"location"]]; [arrID addObject:[[arrdata objectAtIndex:i]objectForKey:@"id"]]; NSLog(@"code is%@",[[arrdata objectAtIndex:i]objectForKey:@"details"]); NSLog(@"code is%@",[arrImageUrl objectAtIndex:i]); } if (arrName.count > 0) { [self addscrollView]; } }else if ([connection isEqual:connection2 ]) { } } 

Вы также можете нажать URL для json-данных блоком в ios

  #define kBgQueue dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) //1 #define kLatestKivaLoansURL [NSURL URLWithString: @"http://api.kivaws.org/v1/loans/search.json?status=fundraising"] //2 

Первое, что нам нужно сделать, это загрузить данные JSON из Интернета. К счастью, с GCD мы можем сделать это в одной строке кода! Добавьте в ViewController.m следующее:

 - (void)viewDidLoad { [super viewDidLoad]; dispatch_async(kBgQueue, ^{ NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL]; [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; }); } - (void)fetchedData:(NSData *)responseData { //parse out the json data NSError* error; NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1 options:kNilOptions error:&error]; NSArray* latestLoans = [json objectForKey:@"loans"]; //2 NSLog(@"loans: %@", latestLoans); //3 } 
  • Разбор JSON (дата) в Swift
  • Выделите столбец с помощью createdAt и updatedAt
  • Анализатор Gpx или документация GPX
  • Разбор синтаксиса PDF iOS Тип 1 Шрифты
  • Поддержка родного JSON в iOS?
  • Как разобрать JSON в приложении iOS
  • Создание GPX-файла из массива CLLocation
  • Получение ошибки в анализе JSON с массивом в iOS
  • Использование символа «меньше» (<) в документе XML и его анализ
  • Xcode не может анализировать экспортированный проект из Unity 4 после обновления с единицы 3
  • Разбор всей pdf-страницы для NSString на iPhone
  • Interesting Posts

    Посоветуйте, как реализовать слайд-шоу изображений / карусель? (iOS)

    Когда использовать takeUnretainedValue () или takeRetainedValue () для извлечения неуправляемых объектов в Swift?

    Запрос HTTP с телом, использующий PATCH в Swift

    Высота UIPickerView не изменяется

    Получить широту и долготу на основе zip, используя класс Geocoder в IOS

    Воспроизведение стандартного звука щелчка клавиатуры iOS в пользовательском расширении клавиатуры

    Сбросить значок приложения iOS

    Содержимое UITextView происходит под UINavigationBar

    Что означает, когда XCode автоматически завершает свойства Swift как «object.?.propertyName»?

    Sqlite синхронизация с iCloud не обновление данных

    Установка цвета кнопки UIAlertView в быстрой

    Изменить размер рамки метки с помощью анимации

    UIPickerView не может получить вывод массива в Swift 3.0

    Почему переход UIPageViewController изменяет шрифт?

    UICollectionViewFlowLayout с элементами разного размера

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.