Я использую TouchJSON для анализа выходных данных JSON Rails API, но у меня возникли трудности.Общая цель состоит в том, чтобы перебрать ответ, проанализировать JSON, создать экземпляр Round
для каждого объекта JSON и вставить эти Round
объекты в NSArray, чтобы я мог загрузить его в UITableView
.Поэтому, если есть более простой способ сделать это, чем то, что я собираюсь показать (что в настоящее время НЕ работает, кстати), пожалуйста, дайте мне знать.
Rails API возвращает коллекцию, которая выглядит кое-чтокак это:
[
{
"round": { "course_title": "Title A", "result": "+8" }
},
{
"round": { "course_title": "Title B", "result": "+4" }
},
...
]
Я также использую ASIHTTPRequest и могу успешно получить ответ, используя:
NSString *responseString = [request responseString];
Но оттуда я не могу никуда добраться.Вот более-менее то, что предлагает TouchJSON:
NSString *jsonString = [request responseString]; // [{"round":{...}}, ..., {"round:{...}}]
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF32BigEndianStringEncoding];
NSDictionary *dictionary = [[CJSONDeserializer deserializer] deserializeAsDictionary:jsonData error:nil];
// then I do this...
NSLog(@"JSON: %@", dictionary); // JSON: null
Я подумал, что смогу пройтись по словарю и создать сопоставления объектов, используя мой класс Round
.Но, возможно, это совершенно неправильный подход.
Я думаю, что JSON, возвращаемый из Rails, представляет собой массив объектов JSON, поэтому, возможно, именно поэтому анализатор JSON не распознает его как допустимый JSON?Отсюда у меня два вопроса:
1) Должен ли TouchJSON принимать массив объектов JSON, например, что возвращает мой API?
2) Можно ли привести responseString кNSArray, чтобы я мог проходить через каждый «раунд» и анализировать JSON таким образом?Если я удаляю первый и последний символы из строки ответа (то есть «[» и «]»), анализатор JSON будет захватывать только первый «раунд» в коллекции.
3) Я собираюсь сделать этовесь процесс правильно?
Любые советы / рекомендации будут высоко оценены.