Используя API (который я пишу) мне нужно вернуть довольно простой массив с сервера, работающего на PHP, с использованием JSON для использования в Objective-C.
На телефоне код будет добавлен вмассив следующей формы:
NSArray *carPics =@[@[@"ford",@"ford.png"],@[@"bmw",@"bmw.png"];
Я могу вернуть вышеупомянутое в JSON в виде строки, избегая всех специальных символов - немного утомительно, но возможно, или заменяя специальные символы магическими строками, такими как ***.а затем сделать строку в виде массива, используя:
NSArray *arr = [str componentsSeparatedByString:@"***"];
С другой стороны, я мог бы создать массив в PHP и вернуть массив в телефон, который затем должен был бы преобразовать массив в Objective-C,
$carpics = array(
array(
"ford" => "ford.png",
"bmw" => "bmw.png",
);
Недостатком этого является то, что это повлечет за собой большее количество конверсий.
Или приближается лучше, или они шесть из одного, полдюжины из другого?
Редактировать
В настоящее время JSON, отправленный сервером, выглядит следующим образом:
{"carpics":{"ford":"ford.png","bmw":"bmw.png"}}
Я пытаюсь декодировать его на телефоне с помощью:
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:jsonFeed
options:kNilOptions
error:&error];
NSMutableArray *carPics = [[json objectForKey:@"carpics"]mutableCopy];
NSArray *myArray = carPics;
Это отлично работает.Я подтвердил, что JSON это словарь.К сожалению, я также с помощью kindOfClass проверил, что carpics или myArray - это не массив, как я хочу, а словарь.
Если я пытаюсь получить первый элемент myArray, используя:
NSArray *object = myArray[i];
Я получаю сообщение об ошибке:
[__NSDictionaryM objectAtIndexedSubscript:]: unrecognized selector sent to instance 0x174449420'
Я действительно хочу массив, так как я хочу пройти по каждому элементу массива по порядку по одному.
Что мне нужно сделатьдля моего JSON, чтобы быть правильным массивом массивов.Я могу либо изменить JSON с сервера, либо обработать JSON по-другому на телефоне.
Вот код PHP, который создает JSON:
header("Content-Type: application/json");
$ret = array("ford"=>"ford.png","bmw"=>"bmw.png");
echo json_encode(array('carpics'=>$ret));