需要一些帮助才能将JSON字符串转换为NSDictionary

时间:2014-01-18 16:29:47

标签: ios objective-c json

如何将此NSString转换为NSDictionary?以下是NSString:

NSLog(@"urlstring: %@", urlString);
输出:urlstring: "{"url":"http://mydomain.com/metaioman_target.png"}"

然后我将其转换为JSON,然后转换为NSDictionary:

NSData *json = [urlString dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:json options:0 error:&e];

但是,当NSLog dic为空时,打印错误会显示以下内容:

error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" 
(JSON text did not start with array or object and option to allow fragments not set.) 
UserInfo=0x16641de0 {NSDebugDescription=JSON text did not start with 
array or object and option to allow fragments not set.}

但是,使用以下内容覆盖urlString

@"{\"ID\":\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":\"Content\":65,\"type\":\"text\"}}"

成功转换它。

我猜引号有问题吗?

2 个答案:

答案 0 :(得分:0)

如果您的字符串有效(就JSON而言){}输出NSLog

urlstring: {"url":"http://mydomain.com/metaioman_target.png"}

所以你的问题是外部的双引号,摆脱它们,它会反序列化。

答案 1 :(得分:0)

实际的JSON字符串周围有双引号。 您需要检查何时添加这些引号并将其删除。

urlString应该是{"url":"http://mydomain.com/metaioman_target.png"}而不是"{"url":"http://mydomain.com/metaioman_target.png"}"

或者您可以在反序列化之前将其删除:

[urlString substringWithRange:NSMakeRange(1, [urlString length]-2)]