2013-03-07 5 views
4

Я имею в NSString "[{"van" : 1,312, "vuan":12,123}] и для того, чтобы получить эти значения для каждого ключа, я делаю это:Как читать данные из строки json? iphone

NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding]; 
    jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err]; 

    self.van = [NSMutableArray arrayWithCapacity:1]; 
    self.vuan = [NSMutableArray arrayWithCapacity:1]; 

    for (NSDictionary *json in jsonArray) { 
     NSString * value = [json objectForKey:@"van"]; 
     [self.van addObject:value]; 
     lbl1.text = value; 

     NSString * value1 = [json objectForKey:@"vuan"]; 
     [self.vuan addObject:value1]; 
     lbl4.text = value1; 
    } 

Может быть, я не должен использовать массив и вместо того, чтобы преобразовать NSData непосредственно в a NSDictionary.

В любом случае, я не понимаю, почему jsonArray является nil, хотя jsonResponse1 содержит значения, которые я написал выше.

EDIT: Мой босс неправильно написал строку json. Спасибо всем за ваши предложения! :)

+2

И что говорит об этом объекте 'NSError'? – trojanfoe

+0

"Нет строкового ключа для значения в объекте вокруг символа 20." –

ответ

1

Вам нужно закодировать более оборонительно, и вы должны сообщать об ошибках, как они будут найдены.

Во-первых, проверьте, если JSON синтаксический не удалось, и если да сообщить об ошибке:

NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding]; 
jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err]; 
if (jsonArray == nil) 
{ 
    NSLog(@"Failed to parse JSON: %@", [err localizedDescription]); 
    return; 
} 

Во-вторых, если эти ключи не в формате JSON, objectForKey: будет возвращать nil и при попытке добавить, что к массивам, он будет бросать исключение, которое является то, что вы хотите избежать:

for (NSDictionary *json in jsonArray) { 
    NSString * value = [json objectForKey:@"van"]; 
    if (value != nil) 
    { 
     [self.van addObject:value]; 
     lbl1.text = value; 
    } 
    else 
    { 
     NSLog(@"No 'van' key in JSON"); 
    } 

    NSString * value1 = [json objectForKey:@"vuan"]; 
    if (value1 != nil) 
    { 
     [self.vuan addObject:value1]; 
     lbl4.text = value1; 
    } 
    else 
    { 
     NSLog(@"No 'vuan' key in JSON"); 
    } 
} 

так что в итоге: ошибки во время выполнения будет происходить так, что вам нужно, чтобы убедиться, что вы с ними справиться. Когда они происходят, вам необходимо сообщить о них как можно больше информации, чтобы вы могли диагностировать и исправлять их.

Смежные вопросы