проблема с разбором JSON - PullRequest
0 голосов
/ 22 мая 2011

Я новичок в мире iphone и json. У меня есть эта структура JSON. Вы можете видеть это ясно, поместив это здесь http://jsonviewer.stack.hu/.

 {"@uri":"http://localhost:8080/RESTful/resources/prom/","promotion":[{"@uri":"http://localhost:8080/RESTful/resources/prom/1/","descrip":"description
 here","keyid":"1","name":"The first
 name bla bla
 ","url":"http://localhost/10.png"},{"@uri":"http://localhost:8080/RESTful/resources/promo/2/","descrip":"description
here","keyid":"2","name":"hello","url":"http://localhost/11.png"}]}

Я хочу разобрать его с помощью json-framework. Я попробовал это

 NSDictionary *json    = [myJSON JSONValue];
            NSDictionary *promotionDic    = [json objectForKey:@"promotion"];
            NSLog(@" res %@ : ",[promotionDic objectAtIndex:0]); 

Но тогда как сделать, чтобы получить для примера название объекта с индексом 0? Я думаю, что я должен положить объект в NSArray? но я не нахожу, как: / и я не номер объекта является переменной. Помогите пожалуйста.

Ответы [ 2 ]

2 голосов
/ 22 мая 2011

Прежде всего, вам нужна эта строка после загрузки JSON

        NSLog(@" json %@ : ",[json description]); 

Это скажет вам, что у вас есть.

Во-вторых, вы не можете вызвать objectAtIndex: в словаре. Если это работает, это потому, что PromotionDict действительно NSArray. (NSLog скажет вам). В Objective-C вы можете назначить любой указатель, который вводит в заблуждение новых разработчиков, но является частью языка и действительно является функцией.

С NSArray вы можете запросить количество вещей в нем, [myArray count] и т. Д. Вам нужно выполнить двойной щелчок в XCode, чтобы открыть документы для NSDictionary и т. Д.

0 голосов
/ 22 мая 2011

JSON говорит:

..."promotion":[{"@u...

То, что "[" там означает, что "продвижение" является ключом к массиву, а не к словарю.

Так что на самом деле ваш код должен быть:

NSDictionary *json    = [myJSON JSONValue];
NSArray *promotions   = [json objectForKey:@"promotion"];
NSLog(@"res: %@",[promotions objectAtIndex:0]); 
...