【问题标题】:EXC_BAD_ACCESS whilst parsing JSON using SBJSON. Corresponding message states variable json_string is not a CFStringEXC_BAD_ACCESS 同时使用 SBJSON 解析 JSON。对应的消息状态变量 json_string 不是 CFString
【发布时间】:2011-11-01 10:29:32
【问题描述】:

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

{"_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";
    }

【问题讨论】:

  • 你在调用NSArray *statuses = [parser objectWithString:[request responseString] error:nil];时是否也遇到同样的错误?

标签: iphone json nsstring


【解决方案1】:

您应该使用现有的 JSON 框架之一,即 JSONKitjson-framework,它们都可以非常容易地将字符串转换为 JSON 对象(即 NSDictionary)。

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

NSDictionary *jsonObject = [responseString JSONValue];

【讨论】:

    【解决方案2】:

    你的线路有问题

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

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

    时将其作为数据提供

    【讨论】:

      【解决方案3】:

      你不需要这行

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

      responseString 已经是一个字符串(并且 initWithData: 需要一个 NSData 对象而不是 NSString)。直接将它提供给解析器:

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

      谁能帮我解决这个问题并告诉我如何进一步采取行动来访问 JSON 组件?

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

      表示
      {"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 对象。

      【讨论】:

      • 当你 NSLog 状态时会发生什么?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2011-08-11
      • 1970-01-01
      • 2014-08-05
      相关资源
      最近更新 更多