Подтвердить что ты не робот

Разбор массива JSON в NSDictionary

Я работаю с API Underground Underground, чтобы сделать приложение, и я ударил его, разбору блока, связанного с серьезными предупреждениями. JSON использует пары ключ-значение, у которых есть пара значений ключа ключа, которые не были проблемой для меня, поскольку я могу сделать последующие NS-словари из них, но запись для серьезных предупреждений оказалась проблематичной. См. Ниже:

"alerts": [
    {
    "type": "WAT",
    "description": "Flash Flood Watch",
    "date": "3:13 PM EDT on April 28, 2012",
    "date_epoch": "1335640380",
    "expires": "8:00 AM EDT on April 29, 2012",
    "expires_epoch": "1335700800",
    "message": "\u000A...Flash Flood Watch in effect through Sunday morning...\u000A\u000AThe National Weather Service in Charleston has issued a\u000A\u000A* Flash Flood Watch for portions of northeast Kentucky... (Note: I trimmed this for length sake),
    "phenomena": "FF",
    "significance": "A"
    }
]

Пара предупреждений отличается от других, которые я смог проанализировать, потому что у нее есть этот [] скобка, окружающая под-значения, и я не уверен, как очистить ее, чтобы я мог доступ к подвалам. В других примерах, которые я смог проанализировать, он имеет только {} скобки, а не как скобки {} и []. Для справки, скобки всегда присутствуют - даже если нет суровых метеорологических предупреждений... в этом случае пара "оповещений" возвращает скобки [] без присутствия подпар.

Есть ли способ удалить скобки [] из NSDictionary или игнорировать их? Любые советы будут оценены!


Для справки и помощи по устранению неполадок здесь, как я успешно разбираю остальную часть документа JSON:

1) Создайте NSDictionary из исходного JSON

//Process Weather Call
NSError* error;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

2) Создайте последующие словари для вложенных пар json

NSDictionary *current_observation = [json objectForKey:@"current_observation"];

3) Назначить значения

NSString* weather;
weather = [current_observation objectForKey:@"weather"];

Таким образом, конечным результатом будет строка с надписью "Частично облачно" или что-то еще, а также многочисленные связанные с ней значения погоды, которые я не показал. Эти синтаксические разборки успешно выполняются, потому что у них есть только скобки области {}, а не скобки [].

4b9b3361

Ответ 1

Скобки означают данные Json в массиве. Вы можете разобрать его, следуя

NSArray *alertArray = [json objectForKey:@"alerts"];

теперь вы должны пропустить все предупреждения и проанализировать их (в вашем случае это только 1, но это может быть больше в другой строке json):

//parse each alert
for (NSDictionary *alert in alertArray ){
     NSString* description = [alert  objectForKey:@"description"];
    //etc...
}

Ответ 2

Хорошо, я получил его работу - и я хотел привести пример здесь, потому что мне пришлось использовать совет @Lefteris, чтобы он работал.

Мне пришлось сначала передать массив json как NSArray, а затем я преобразовал его в NSDictionary с первым элементом массива. Все после этого работало как описано @Lefteris.

Итак, в конце концов, вот что у меня получилось:

NSArray *alerts = [json objectForKey:@"alerts"];
NSDictionary *alertDict = [[NSDictionary alloc] init];

//Check that no alerts exist to prevent crashing
if([alerts count] < 1) {
    NSLog(@"No Alerts Here!");
    type = nil;
    ...
}
else  //Populate fields
{
    alertDict = [alerts objectAtIndex:0];
    for (NSDictionary *alert in alertDict)
    {
        NSLog(@"Printing alert!");
        type = [alertDict objectForKey:@"type"];
        ...
    }
} 

Это заставило меня работать с одиночным массивом итерации - продолжаю. Я ожидаю, что могу просто перебирать массив, так как знаю кол-во и обрабатываю любые дополнительные предупреждения. Еще раз спасибо за помощь!