PHP / IOS: какой лучший способ кодировать json для веб-сервиса?

Я пытаюсь создать веб-сервис, который обслуживает json из базы данных mysql через php для отображения в приложении для iPhone.

У меня стандартная настройка mysql / php.

Данные находятся в таблице с полями и записями. Он запрашивает sql для создания набора записей. Каждая запись в наборе записей – это строка.

php $sql = "SELECT userid,task,longtask FROM tasks WHERE userid = 1 LIMIT 1"; $res = mysql_query($sql) or die(mysql_error()); $tasks = array(); while($row = mysql_fetch_assoc($res)) { $tasks[] = array('row'=>$row); } echo json_encode(array('tasks'=>$tasks)); // 

Веб-служба производит следующий вывод:

 {"tasks":[{"row":{"userid":"1","task":"send email to Bob","longtask":"include attached memo"}}]} 

Однако у меня много проблем с тем, чтобы прочитать это в IOS, предлагая, чтобы был лучший формат для веб-службы.

Структура отличается от структуры в учебниках и других источниках, которые я нашел для чтения json в IOS (ни один из которых не использует php / mysql).

Может ли кто-нибудь сказать мне лучший способ структурировать json или, альтернативно, код, чтобы прочитать этот json в iOS, чтобы захватить идентификатор пользователя, задачу и другие переменные.

Когда я пытаюсь это сделать, я получаю сообщение об ошибке, что он не может исправить строки по индексу: 0

  NSError* error; NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1 options:kNilOptions error:&error]; NSLog(@"about to print json: %@",json); NSMutableArray *getElement = [json objectForKey:@"tasks"]; for (NSDictionary *dict in getElement) { NSArray *array = [dict objectForKey:@"row"]; NSString *str = [array objectAtIndex:0]; } 

Спасибо заранее за любые предложения.

Метод 1: Изменить код PHP

Индекс 0 недоступен, поскольку вы mysql_fetch_assoc ассоциативный массив из PHP с помощью mysql_fetch_assoc .

Использование mysql_fetch_array возвращает массив, содержащий индексы с нулевым mysql_fetch_array и ассоциативные ключи.

 $sql = "SELECT userid,task,longtask FROM tasks WHERE userid = 1 LIMIT 1"; $res = mysql_query($sql) or die(mysql_error()); $tasks = array(); while($row = mysql_fetch_array($res)) { $tasks[] = array('row'=>$row); } echo json_encode(array('tasks'=>$tasks)); 

Выйдет

 {"tasks":[{"row":{"0":"1","userid":"1","1":"send email to Bob","task":"send email to Bob","2":"include attached memo","longtask":"include attached memo"}}]} 

Теперь вы можете получить идентификатор пользователя с помощью любой из клавиш 0 или userid .

Способ 2. Редактирование кода iOS

Измените код iOS. Но для этого вам нужно будет знать ключи в строке.

 NSString *str = [array objectForKey:@"userid"];`