Нужна помощь для разбора json для iPhone
Я хочу проанализировать файл JSON в своем приложении для iPhone. Проблема в том, что я могу анализировать простые файлы json, но я не понимаю, как выполнить синтаксический анализ следующего типа json:
[{"123":
[{ "item_id":"222",
"image_count":"2",
"image_filetype":".jpg",
"image_url":"http:\/\/someurl.jpg",
},
{"item_id":"333",
"image_count":"2",
"image_filetype":".jpg",
"image_url":"http:\/\/someurl.jpg",
}]
}]
Может кто-нибудь помочь мне, как извлечь все img_urls для "123".
Спасибо.
5 ответов
NSString *jsonString = …;
// The top-level object is an array
NSArray *array = [jsonString JSONValue];
// The first element in the array is an object containing a name-value
// pair for the key/name "123". The value is itself an array
NSArray *itemsIn123 = [[array objectAtIndex:0] objectForKey:@"123"];
// Use Key-Value Coding to get an array of all values for the key
// image_url
NSArray *imgurls = [itemsIn123 valueForKey:@"image_url"];
Редактировать на основе комментариев:
Поскольку массив верхнего уровня может состоять из нескольких объектов, каждый из которых имеет одну пару имя-значение с неизвестным именем, вам нужно вручную выполнить итерацию по массиву верхнего уровня:
NSString *jsonString = …;
NSMutableArray *imgurls = [NSMutableArray array];
// The top-level object is an array
NSArray *array = [jsonString JSONValue];
// Each element in the top-level array is an object
for (NSDictionary *outerObject in array) {
// Iterate over all values in the object. Each (single) value is an array
for (NSArray *innerArray in [outerObject allValues]) {
[imgurls addObjectsFromArray:[innerArray valueForKey:@"image_url"]];
}
}
Значением для объекта "123" будет NSArray из NSDictionaries. В каждом из этих словарей есть ключ image_url для URL изображения.
Код будет зависеть от того, какую библиотеку синтаксического анализа JSON вы используете, но основы должны быть такими же.
Сначала вы хотите взять значения ключей, такие как 123,112,189, поэтому мы возьмем ключи в массив
скажем, такая структура, как [ Web { 123 {URL-адрес изображения} 112 {URL-адрес изображения} 189 {URL-адрес изображения} ]
так
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
SBJSON *jsonParser = [SBJSON alloc]init];
NSMutableArray *yourArray1 = [jsonParser objectWithString:responseString]copy]]autorelease;
ufArray = [[yourArray1 valueForKey:@"web"] copy];
for (NSString *s in ufArray) {
[keys addObject:[NSDictionary dictionaryWithObjectsAndKeys:s,@"keys",nil]];
}
NSLOG(@"keys :%@",keys);
// this will contain 112,123,114 etc values
initialize a NSMutableArray
finalArray = [NSMutableArray alloc]init];
for (int i = 0; i < [ufArray count]; i ++) {
yourArray1 = [ufArray valueForKey:[[keys objectAtIndex:i]valueForKey:@"keys"]];
// [keys object at indes:i] - > 123 val / next loop 112 array like that
[finalArray addObject:yourArray1];
}
[jsonParser release];
jsonParser = nil;
Надеюсь это поможет!
Хорошо, если этот массив был вызван jArray
var img_urls = [];
var jL = jArray[0][123].length;
var img_urls = [];
for(var i = 0; i < jL; i++){
img_urls[i] = jArray[0][123][i].image_url;
}
//display in console:
console.log(img_urls);
Я никогда раньше не использовал JSON, никогда раньше не пользовался iPhone, никогда раньше не использовал Xcode... но я бы подумал, что это что-то вроде...
//object and image for item ID 222
123: item_id(222).image_url("some_url")
или второй и последующие пункты
//hi
123: item_id(333).image_url("some_url")
Однако что-то лучше было бы, когда вы можете извлечь изображение без URL-адреса, используя идентификатор элемента и идентификатор изображения, поэтому при вызове объекта 123 вы можете указать идентификатор элемента и идентификатор изображения, которые затем будут выводить всю информацию, которую вы требуют. Например, количество, тип файла и изображение могут быть отображены.
123: item_id(222).image_id(222)
Является ли файл данных SQL или XML? XML обычно быстрее! Так что читайте по узлам.
Надеюсь, это поможет.
DL.