2

我无法从 JSON 请求中解析 base64 字符串的原因是什么?当我把它变成一个小字符串时,它就可以工作了。

澄清一点:

    else if([connection isEqual:self.appearanceConnection]){

        NSArray *arrayOfAppearances = [NSJSONSerialization JSONObjectWithData:[[[NSString alloc] initWithData:data
                                                                                                   encoding:NSUTF8StringEncoding] dataUsingEncoding:NSUTF8StringEncoding]options:NSJSONReadingAllowFragments error:&error];
        NSLog(@"het aantal appearances is: %i", arrayOfAppearances.count);
        [self syncAppearances:arrayOfAppearances];



    }

当我将它编辑为一个小字符串时,我得到的响应是接收到的数组的长度为 1。如果我再次将其更改为图像的 base 64,则长度为 0。

http://cl.ly/image/470Z0X1P3K1b(图像格式 JSON 响应)

在此处输入图像描述

我在字符串上遇到的错误:

在此处输入图像描述

4

2 回答 2

5

更新的答案:

您现在通知我们JSONObjectWithData正在报告错误:

字符 62 周围的未终止字符串

字符 62 是徽标的开头。我在您的任何屏幕快照中都没有看到 JSON 的结尾。好像要断了

您尚未向我们展示您是如何填充的data,但看起来您几乎正在使用 aNSURLConnection但尝试解析,didReceiveData而不是等待完整结果并仅调用 JSON 解析connectionDidFinishLoadingNSURLConnection会将长响应分解为多个调用didReceiveData,您必须将所有这些附加NSData到单个NSMutableData,并且仅在检索完所有内容后才尝试解析它。

您需要 (a) 向我们展示您加载数据的代码和/或 (b) 共享完整的 JSON。要么你的 JSON 没有正确终止,要么你试图在整个下载之前解析它(可能是后者)。


原答案:

我不确定这是否是问题,但您的线路说:

NSArray *arrayOfAppearances = [NSJSONSerialization JSONObjectWithData:[[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] dataUsingEncoding:NSUTF8StringEncoding]options:NSJSONReadingAllowFragments error:&error];

应该只是:

NSArray *arrayOfAppearances = [NSJSONSerialization JSONObjectWithData:data
                                                              options:0
                                                                error:&error];

JSONObjectWithData方法采用 a NSData,而不是 a NSString

而且,如果你没有从这个方法中得到任何返回,你应该检查它的内容,error看看它说了什么。

如果您仍然无法找出问题所在,也许您可​​以与我们分享完整的 JSON 响应(给我们一个 URL 或将其上传到某个地方),我们可以查看它。

于 2013-05-17T18:32:52.080 回答
2

非常感谢@Rob!

这里做一个小总结:

  • 创建一个变量 NSMutableData(不要忘记在 viewdidload 中初始化)
  • 在 didReceiveData 中,您使用 [self.appearancedata appendData:data] 将数据附加到可变数据;
  • 在 connectionDidFinishLoading 你解析你的 JSON
于 2013-05-17T19:59:26.093 回答