JSON в NSDictionary в NSArray дать мне пустой NSArray? :( - PullRequest
0 голосов
/ 02 февраля 2012

Вот моя проблема:

INPUT (с определенного сайта):

{"error":[],"results":{"count":2,"data":[{"ART_ID":"656","ART_NAME":"Noir D\u00e9sir","ART_PICTURE":".....","NB_ALBUM":"15","NB_FAN":"90176","SMARTRADIO":"1","URL_REWRITING":"noir-desir"},{"ART_ID":"167225","ART_NAME":"LMFAO","ART_PICTURE":"....","NB_ALBUM":"17","NB_FAN":"122408","SMARTRADIO":"1","URL_REWRITING":"lmfao"}],"total":2}}

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

 NSError* jsonError = nil;
 //responseData contains my json feed
 NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&jsonError];

 NSLog(@"responseDictionary : \n%@\n--------\n", [dict description]);

Для получения следующего:

{
    error =     (
    );
    results =     {
        count = 2;
        data =         (
                        {
                "ART_ID" = 656;
                "ART_NAME" = "Noir D\U00e9sir";
                "ART_PICTURE" = 17b0a9c3defcf8c3eef943759606b3f4;
                "NB_ALBUM" = 15;
                "NB_FAN" = 90176;
                SMARTRADIO = 1;
                "URL_REWRITING" = "noir-desir";
            },
                        {
                "ART_ID" = 167225;
                "ART_NAME" = LMFAO;
                "ART_PICTURE" = 72a09b9202da38afae077e80c7598212;
                "NB_ALBUM" = 17;
                "NB_FAN" = 122408;
                SMARTRADIO = 1;
                "URL_REWRITING" = lmfao;
            }
        );
        total = 2;
    };
}

Здесь у меня нет особых проблем ... Но теперь я хочу получить поле "data" в этом NSDictionary. Поэтому я просто создаю новый:

NSDictionary* resultField = [NSDictionary dictionaryWithDictionary:[dict objectForKey:@"results"]];

Который содержит:

{
    count = 2;
    data =     (
                {
            "ART_ID" = 656;
            "ART_NAME" = "Noir D\U00e9sir";
            "ART_PICTURE" = 17b0a9c3defcf8c3eef943759606b3f4;
            "NB_ALBUM" = 15;
            "NB_FAN" = 90176;
            SMARTRADIO = 1;
            "URL_REWRITING" = "noir-desir";
        },
                {
            "ART_ID" = 167225;
            "ART_NAME" = LMFAO;
            "ART_PICTURE" = 72a09b9202da38afae077e80c7598212;
            "NB_ALBUM" = 17;
            "NB_FAN" = 122408;
            SMARTRADIO = 1;
            "URL_REWRITING" = lmfao;
        }
    );
    total = 2;
}

Теперь я хочу получить мое поле данных, которое теперь является JSONArray (больше не NSDictionary ...):

NSArray* dataField = [[NSArray alloc] initWithArray:[dict objectForKey:@"data"]];

Но после этого мое поле данных пусто ... Под этим я подразумеваю:

NSArray* dataField = [[NSArray alloc] initWithArray:[dict objectForKey:@"data"]];
if (!dataField || ![dataField isKindOfClass:[NSArray class]]) {
    NSLog(@"Pb parsing DATA field as NSArray...");
}
NSLog(@"dataField : \n%@\n--------\n", [dataField description]);

Не показывает ошибку, поскольку это правильно отформатированный NSArray, но выводит следующее:

2012-02-02 14:08:52.315 myapp[5235:f803] dataField : 
(
)

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

Спасибо

1 Ответ

4 голосов
/ 02 февраля 2012

Вы берете массив данных из первого словаря (dict), вы должны взять его из resultField:

NSArray* dataField = [[NSArray alloc] initWithArray:[resultField objectForKey:@"data"]];
...