使用SBJSON解析JSON时的EXC_BAD_ACCESS。对应的消息状态变量json_string不是CFString

时间:2011-11-01 10:29:32

标签: iphone json nsstring

我从服务器端得到以下响应:

{"_playLists":[{"name":"Playlist 1","items":[{"name":"Poza 1","target":"http:\/\/myaudi.fr","url":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/image\/pic1_iphone3.jpg","url_thumb":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/thumb\/pic1_iphone3_thumb.jpg"},{"name":"Poza 2","target":"http:\/\/audifrance.fr","url":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/image\/pic2_iphone3.jpg","url_thumb":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/thumb\/pic2_iphone3_thumb.jpg"}]},{"name":"Playlist 2","items":[{"name":"Poza 3","target":"http:\/\/google.ro","url":null,"url_thumb":null}]}]}

我正试图通过使用:

来访问它
SBJSON *parser = [[SBJSON alloc] init];
NSString *responseString = [request responseString];

NSString *json_string = [[NSString alloc] initWithData:responseString encoding:NSUTF8StringEncoding];
NSArray *statuses = [parser objectWithString:json_string error:nil];

但我在这一行得到EXC_BAD_ACCESS

 NSString *json_string = [[NSString alloc] initWithData:responseString encoding:NSUTF8StringEncoding]; 

说变量json_string不是CFString

有人可以帮我解决这个问题并告诉我如何进一步采取行动来访问JSON组件吗?谢谢:)

编辑:

{
        items =         (
                        {
                name = "Poza 1";
                target = "http://myaudi.fr";
                url = "http://test.res-novae.fr/sfrplay/upload/image/pic1_iphone3.jpg";
                "url_thumb" = "http://test.res-novae.fr/sfrplay/upload/thumb/pic1_iphone3_thumb.jpg";
            },
                        {
                name = "Poza 2";
                target = "http://audifrance.fr";
                url = "http://test.res-novae.fr/sfrplay/upload/image/pic2_iphone3.jpg";
                "url_thumb" = "http://test.res-novae.fr/sfrplay/upload/thumb/pic2_iphone3_thumb.jpg";
            }
        );
        name = "Playlist 1";
    },
        {
        items =         (
                        {
                name = "Poza 3";
                target = "http://google.ro";
                url = "<null>";
                "url_thumb" = "<null>";
            }
        );
        name = "Playlist 2";
    }

3 个答案:

答案 0 :(得分:1)

您应该使用其中一个可用的JSON框架,即JSONKitjson-framework,这两个框架都可以很容易地将字符串转换为JSON对象(即NSDictionary)。

如果您使用的是json-framework,则只需执行以下操作(如果已包含JSON.h):

NSDictionary *jsonObject = [responseString JSONValue];

答案 1 :(得分:0)

您不需要此行

NSString *json_string = [[NSString alloc] initWithData:responseString encoding:NSUTF8StringEncoding];

responseString已经是一个字符串(而initWithData:期望NSData对象不是NSString)。只需将其直接输入解析器:

NSArray *statuses = [parser objectWithString:responseString error:nil];
  

有人可以帮我解决这个问题并告诉我如何进一步采取行动   JSON组件?

您现在有一个很好的NSArray NSDictionary对象代表您的JSON数据,您可以访问第一个项目,由

表示
{"name":"Playlist 1","items":[{"name":"Poza 1","target":"http:\/\/myaudi.fr","url":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/image\/pic1_iphone3.jpg","url_thumb":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/thumb\/pic1_iphone3_thumb.jpg"},{"name":"Poza 2","target":"http:\/\/audifrance.fr","url":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/image\/pic2_iphone3.jpg","url_thumb":"http:\/\/test.res-novae.fr\/sfrplay\/upload\/thumb\/pic2_iphone3_thumb.jpg"}]}

获取数组中的第一个元素

NSDictionary* dict = [statuses objectAtIndex:0];

字典中的键应为“name”和“items”。 “name”的对象将是NSString,“items”的对象将是一个NSArray,其中包含描述每个项目的更多NSDictionary对象。

答案 2 :(得分:0)

您的行存在问题

NSString *json_string = [[NSString alloc] initWithData:responseString encoding:NSUTF8StringEncoding];

您已将responseString声明为NSString *responseString = [request responseString]; 并且您在分配json_string

时将其作为数据提供