将JSON格式的NSString转换为NSArray失败

时间:2015-04-13 15:39:53

标签: ios objective-c json nsarray

很抱歉发布关于转换为NSArray的另一个问题,但即使在同一个问题上阅读了数十篇帖子之后我也无法解决这个问题。看起来很简单,但是......

- (void) parseList : (NSString *) str {

    NSLog(@"list as a string: %@", str);

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    if (!data) NSLog(@"no data");

    NSError *err = nil;
    NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];

    NSLog(@"count: %lu", (unsigned long)[arr count]);
}

这是输出:

  

以字符串形式列出:[{" id":" 1"," name":"示例   name"," filename":" image.png"}]
数:0

如何计算数组?阵列中显然有一个项目。

我不想让这篇帖子不必要地复杂化,但这可能很重要,所以这里也是如此。传递给此函数的字符串由服务器以加密格式返回。所以在它传入之前,它首先会经历一个如下所示的解密过程:

- (NSString *) decryptBase64EncodedString : (NSString *) base64EncodedCipherTextString
                    base64EncodedIvString : (NSString *) base64IvString
{

    NSData *cipherData = [[NSData alloc] initWithBase64EncodedString:base64EncodedCipherTextString options:0];
    NSData *ivData = [[NSData alloc] initWithBase64EncodedString:base64IvString options:0];

    NSData *data = [self AES128Operation : kCCDecrypt
                          cipherTextData : cipherData
                                  ivData : ivData];

    NSString *decrypted = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

    return decrypted;
}

我不认为这个函数的内部非常重要,除了最后两行指出如何实例化这个字符串(来自NSData)。它可能既不在这里也不在那里,但主要转换为NSArray似乎是如此简单,以至于必须有更多的东西在这里。 (如果不清楚,字符串'解密'是传递给' parseList')

1 个答案:

答案 0 :(得分:0)

好吧,我想通了。完全归功于@rmmaddy,我意识到我的阵列是零。当我添加NSLog语句来检查错误时,我发现了这个:

  

错误域= NSCocoaErrorDomain代码= 3840"操作不能   完成。 (可可误差3840。)" (最后是垃圾。)

我发现在我尝试解析它之前,JSON字符串中至少有一个空终止字符需要删除。我添加了这一行:

str = [str stringByReplacingOccurrencesOfString:@"\0" withString:@""];

到我方法的开头。它有点笨拙,但你能做什么?

为了完整性,这里是成功解析JSON字符串的完整方法:

- (void) parseList : (NSString *) str {
    str = [str stringByReplacingOccurrencesOfString:@"\0" withString:@""];

    NSLog(@"list as a string: %@", str);

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    if (!data) NSLog(@"no data");

    NSError *err = nil;
    NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&err];

    if (!arr) NSLog("%@", err);

    NSLog(@"count: %lu", (unsigned long)[arr count]);
}

我的输出保持不变,除了数组计数现在是1,它应该是,现在我可以继续实际解析JSON数组的各种元素。我希望这有助于某人。