iOS-ошибка при разборе данных

В моем приложении я анализирую данные с помощью JSON.

NSString * urlString=[NSString stringWithFormat:@"http://[email protected]&latitude=59.34324&longitude=23.359257"];
NSURL * url=[NSURL URLWithString:urlString];
NSMutableURLRequest * request=[NSMutableURLRequest requestWithURL:url];
NSError * error;
NSURLResponse * response;
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString * outputData=[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@",outputData);

SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:outputData error:nil];
NSLog(@"%@",jsonData);
NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue];  

После выполнения этого кода в моем журнале он печатается как

({  
latitude = "0.000000000000000";  
longitude = "0.000000000000000";  
username = sunil;  
},  
{  
latitude = "80.000000000000000";  
longitude = "30.000000000000000";  
username = arun;  
})  

Но во время работы приложение вылетает, т.к.

'NSInvalidArgumentException', reason: '-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0x910d8d0'

person chandru    schedule 02.01.2014    source источник
comment
приведенный выше код в порядке, ошибка где-то еще в вашем коде. пожалуйста, покажите нам экземпляр вашего массива и код, в котором вы пытаетесь получить доступ к данным в своем массиве, поскольку вы пытаетесь вызвать метод на своем NSMutableArray, который существует только для NSMutableDictionary   -  person dehlen    schedule 02.01.2014
comment
о, извините, я обновлю это   -  person chandru    schedule 02.01.2014
comment
Насколько мне известно, в json вместо '=' используется ':'. Дайте мне знать, если я ошибаюсь   -  person Prince Agrawal    schedule 02.01.2014
comment
@achievelimitless, я получил ответ, спасибо   -  person chandru    schedule 02.01.2014


Ответы (4)


Я думаю, ваша проблема в том, что jsonParser objectWithString возвращает массив со словарями, а не сами словари.

Попробуйте следующее:

NSArray *jsonData = (NSArray *) [jsonParser objectWithString:outputData error:nil];

for(NSDictionary *dict in jsonData) {
    NSLog(@"%@",dict);
}

Это работает для вас?

person dehlen    schedule 02.01.2014
comment
теперь мой словарь содержит много координат, я хочу их нанести, на карты гугла, любую помощь - person chandru; 02.01.2014
comment
Обновите свой вопрос или создайте новый вопрос с подробным описанием вашей проблемы и того, что вы пробовали до сих пор. - person dehlen; 03.01.2014
comment
можете ли вы помочь мне в этом заголовке stackoverflow.com/questions/20902732/ - person chandru; 04.01.2014

Ваш ответ NSArray содержит NSDictionary. Итак, сначала получите словарь из массива, а затем получите доступ к значению. Также ваш json не выглядит правильным.

for (NSDictionary *dict in responseArray) {
    double latitude = [dict[@"latitude"]doubleValue];
    double longitude = [dict[@"latitude"] longitude];
    NSString* name = dict[@"username"];
}
person Bhumeshwer katre    schedule 02.01.2014
comment
теперь мой словарь содержит много координат, я хочу их нанести, на карты гугла, любую помощь - person chandru; 02.01.2014
comment
Я знаю, как использовать карты Google и наносить точки, я сомневаюсь, что я не знаю, как получить значения из nsdictionary. - person chandru; 02.01.2014
comment
В ответ вы можете увидеть, как получить значение из NSDictionary - person Bhumeshwer katre; 02.01.2014
comment
можете ли вы помочь мне с этим заголовком stackoverflow.com/questions/20902732/ - person chandru; 04.01.2014

<сильный>1. Прежде всего, вы получаете NSArray в JSON

JSON начинается с "(" означает NSArray

JSON начинается с "{" означает NSDictionary

Здесь вы получаете NSArray с коллекцией NSDictionary,

    {
        latitude = "0.000000000000000";
        longitude = "0.000000000000000";
        username = sunil;  
    },...

Ключ 2 "success" отсутствует в JSON..

  • Исправить

    NSArray *jsonData = (NSArray *) [jsonParser objectWithString:outputData error:nil];
    
    If([jsonData count]>0){
    
        // Has some data
        // Iterate NSDictionary and get data here
    }
    else{
    
        // No Data
    }
    
person Vijay-Apple-Dev.blogspot.com    schedule 02.01.2014
comment
теперь мой словарь содержит много координат, я хочу их нанести, на карты гугла, любую помощь - person chandru; 02.01.2014
comment
Не могли бы вы помочь мне с этим stackoverflow.com/questions/20902732/ - person chandru; 04.01.2014

где-то вы получаете данные от nsarray с использованием некоторого ключа объекта. этот ключ недействителен для извлечения данных из массива

person codercat    schedule 02.01.2014