Как разобрать JSON в Objective-C - PullRequest
0 голосов
/ 24 мая 2011

у меня есть эта строка json

{
    "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/",
    "city": [
        {
            "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ABJ/",
            "agencyCollection": {
                "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ABJ/agencyCollection/"
            },
            "codecit": "ABJ",
            "country": {
                "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ABJ/country/"
            },
            "namecit": "ABIDJAN"
        },
        {
            "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ALG/",
            "agencyCollection": {
                "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ALG/agencyCollection/",
                "agency": [
                    {
                        "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ALG/agencyCollection/3/"
                    },
                    {
                        "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ALG/agencyCollection/4/"
                    }
                ]
            },
            "codecit": "ALG",
            "country": {
                "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/ALG/country/"
            },
            "namecit": "ALGER"
        },
        {
            "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/AMS/",
            "agencyCollection": {
                "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/AMS/agencyCollection/",
                "agency": [
                    {
                        "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/AMS/agencyCollection/5/"
                    },
                    {
                        "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/AMS/agencyCollection/6/"
                    }
                ]
            },
            "codecit": "AMS",
            "country": {
                "@uri": "http://localhost:8080/TunisairRESTful/resources/cities/AMS/country/"
            },
            "namecit": "AMSTERDAM"
        }
    ]
}

Я хочу разобрать ее, я написал этот код

NSString *myJSON = [[NSString alloc] initWithContentsOfFile:responseString encoding:NSUTF8StringEncoding error:NULL];   
NSDictionary *json    = [myJSON JSONValue];
//NSLog(responseString);
NSArray *citysList    =  [json objectForKey:@"city"];
NSLog(@"ok");
NSLog(@" number of element : %@", [citysList count]);

Но у меня 0 элементов, помогите, пожалуйста

Ответы [ 2 ]

1 голос
/ 24 мая 2011

Майкл прав. Вот более подробный ответ:

initWithContentsOfFile принимает строку, содержащую путь к файлу (например, "/users/mehdi/documents/myFile.txt"). Вы, кажется, передаете свою фактическую строку JSON, которая не является путем к файлу. В результате initWithContentsOfFile, вероятно, возвращает nil.

Проверьте это, спросив:

if (myJSON == nil) NSLog(@"myJSON variable == nil!");

Если это ноль, то ваш код также устанавливает json и citysList на ноль.

Попробуйте это:

NSDictionary *json    = [responseString JSONValue];
NSArray *citysList    =  [json objectForKey:@"city"];
NSLog(@" number of element : %d", [citysList count]);
1 голос
/ 24 мая 2011

Вы делаете initWithContentsOfFile, но передаете строку. Вы пробовали просто [responseString JSONValue]? Ваш код предполагает, что responseString имеет путь к файлу, который вы пытаетесь открыть, а не саму строку полного ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...