Я пытаюсь создать веб-сервис, который обслуживает 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]; }
Спасибо заранее за любые предложения.
Индекс 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
.
Измените код iOS. Но для этого вам нужно будет знать ключи в строке.
NSString *str = [array objectForKey:@"userid"];`