Я прочитал несколько форумов, но, похоже, не смог выполнить эту простую задачу. У меня есть вид в Xcode, который указывает на скрипт PHP и сохраняет результаты в виде NSString ниже:
[{ "ID": "16", "имя": "Боб", "возраст": "37"}]
У меня возникла проблема с разбором этого NSString. Вот как я получаю содержимое NSString:
NSString *strURL = [NSString stringWithFormat:@"http://www.website.com/json.php? id=%@",userId]; // to execute php code NSData *dataURL = [NSData dataWithContentsOfURL:[NSURL URLWithString:strURL]]; // to receive the returend value NSString *strResult = [[NSString alloc] initWithData:dataURL encoding:NSUTF8StringEncoding];
Как преобразовать результат (strResult) в JSON и удалить из него объекты? Я бы предположил, что это что-то вроде ниже, но я знаю, что мне что-то не хватает
NSString *name = [objectForKey:@"name"]; NSString *age = [objectForKey:@"age"];
Любая помощь будет большой. Спасибо!
используйте класс NSJSONSerialization, чтобы прочитать его
id jsonData = [string dataUsingEncoding:NSUTF8StringEncoding]; //if input is NSString id readJsonDictOrArrayDependingOnJson = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil];
в твоем случае
NSArray *readJsonArray = [NSJSONSerialization JSONObjectWithData:dataURL options:0 error:nil]; NSDictionary *element1 = readJsonArray[0]; //old style: [readJsonArray objectAtIndex:0] NSString *name = element1[@"name"]; //old style [element1 objectForKey:@"name"] NSString *age = element1[@"age"]; //old style [element1 objectForKey:@"age"]
Попробуй это….
NSString * strResult = [[NSString alloc] initWithData:responseMutableData encoding:NSUTF8StringEncoding]; SBJSON *jsonParser = [[SBJSON alloc]init]; if([[jsonParser objectWithString:strResult] isKindOfClass:[NSArray class]]) { NSArray *jsonArr=[jsonParser objectWithString: strResult]; NSDictionary *firstDictonary = [jsonArr objectAtIndex:0]; NSString *name = [firstDictonary valueForKey:@"name"]; NSString *age = [firstDictonary valueForKey:@"age"]; }
Если вы ориентируетесь на iOS 5 и выше, просто используйте NSJSONSerialization
Если вы ориентируетесь ниже IOS 5, используйте парсер JSON, подобный этому: http://stig.github.com/json-framework/
И просто вызовите метод JSONValue (или эквивалентный) в строке JSON:
NSDictionary *dict= [strResult JSONValue]; NSString *name = [dict objectForKey:@"name"]; NSString *age = [dict objectForKey:@"age"];
Кстати, ваша строка JSON выглядит как массив, и вы не можете использовать objectForKey
для получения объектов из NSArray
. У вас есть два варианта: измените свой ответ строки JSON как словарь или используйте objectAtIndex
для получения объектов.