如何从JSON解析base64图像

时间:2013-05-17 16:30:07

标签: objective-c json base64

我无法从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.如果我再次将其更改为图像的基数64,则长度为0.

http://cl.ly/image/470Z0X1P3K1b(图片形式JSON回复)

enter image description here

我在String上遇到的错误:

enter image description here

2 个答案:

答案 0 :(得分:5)

更新回答:

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

  

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

字符62是徽标的开头。我没有在任何屏幕快照中看到JSON的结束。它看起来像是被切断了。

您尚未向我们展示您如何填充data,但它看起来几乎就像您正在使用NSURLConnection但尝试解析didReceiveData而不是等待完整结果,仅调用connectionDidFinishLoading中的JSON解析。 NSURLConnection会在对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方法需要NSData,而不是NSString

并且,如果您没有从此方法返回任何内容,则应检查error的内容并查看其内容。

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

答案 1 :(得分:2)

非常感谢@Rob!

这里有一点摘要:

  • 创建变量NSMutableData(不要忘记在viewdidload中初始化)
  • 在didReceiveData中,使用[self.appearancedata appendData:data];
  • 将数据附加到可变数据中
  • 在connectionDidFinishLoading中解析您的JSON