【问题标题】:How to parse JSON in Objective-C如何在 Objective-C 中解析 JSON
【发布时间】:2011-08-31 12:49:57
【问题描述】:

我有这个 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个元素,请帮忙

【问题讨论】:

    标签: iphone objective-c json


    【解决方案1】:

    迈克尔是对的。这是一个更详细的答案:

    initWithContentsOfFile 接受一个包含文件路径的字符串(例如“/users/mehdi/documents/myFile.txt”)。您似乎正在传递您的实际 JSON 字符串,这不是文件路径。因此,initWithContentsOfFile 可能会返回 nil

    通过询问来检查:

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

    如果它为 nil,那么您的代码也将 jsoncitysList 设置为 nil。

    试试这个:

    NSDictionary *json    = [responseString JSONValue];
    NSArray *citysList    =  [json objectForKey:@"city"];
    NSLog(@" number of element : %d", [citysList count]);
    

    【讨论】:

      【解决方案2】:

      您正在执行 initWithContentsOfFile 但传入一个字符串。您是否尝试过简单的 [responseString JSONValue]?您的代码表明 responseString 具有您尝试打开的文件的路径,而不是您的完整响应字符串本身。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 2013-06-06
        • 1970-01-01
        相关资源
        最近更新 更多