将响应转换为NSDictionary时json解析时出错

时间:2010-11-22 13:04:25

标签: iphone objective-c json parsing jsonp

AM在json解析中将json响应转换为NSdictionary时出现以下错误...

错误:-JSONValue失败。错误跟踪是:(     Error Domain = org.brautaset.JSON.ErrorDomain Code = 3 UserInfo = 0x4d38270“无法识别的前导字符” )

任何建议......

2 个答案:

答案 0 :(得分:1)

你很可能和我有同样的问题......返回的数据是JSONP格式而不是纯JSON。换句话说,你将处理像

这样的事情
functionCall({"Name": "Foo", "Id" : 1234, "Rank": 7});

而不仅仅是

{"Name": "Foo", "Id" : 1234, "Rank": 7}

更多信息here

在通过JSON Framework解析之前,您需要从字符串中去除函数和括号。您可以使用以下正则表达式(间隔开以便于查看):

\w+ \s? \( ( \{ .* \} ) \}

写这个的脚本是:

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression
    regularExpressionWithPattern:@"\\w+\\s?\\((\\{.*\\})\\)"
                         options:NSRegularExpressionCaseInsensitive
                           error:&error];

[regex replaceMatchesInString:resultString
                      options:0
                        range:NSMakeRange(0, [resultString length])
                 withTemplate:@"$1"];

NSLog(@"resultString = %@", resultString);
NSLog(@"converted = %@", [resultString JSONValue]);

其中resultString是来自网址请求的响应...必须将其存储为NSMutableString,以便正则表达式对其进行更新。

答案 1 :(得分:0)

实际上我没有使用api am检索它来创建json对象..

现在我找到了这个错误的原因。我没有给有效的json对象转换成nsdictionary ...所以为了获得有效的json对象,我们必须生成有效的url来检索json对象。

感谢您的建议......