XCODE中的JSON解析不一致(可可错误3840)
问题描述:
我使用相同的类和方法通过两个专门编写的API下载数据。其中一个API的作品很好,但另一个会产生错误3840XCODE中的JSON解析不一致(可可错误3840)
下面是代码:
+(NSDictionary *)executeSearchRequest:(NSString *)usingThisURL
{
NSError* error = nil;
usingThisURL = [NSString stringWithFormat:@"%@&format=json&nojsoncallback=1", usingThisURL];
NSLog(@"URL Sent to Athletic.net: %@", usingThisURL);
// usingThisURL = [usingThisURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
// Preceding line makes one call fail and does not correct problem with other.
NSLog(@"[%@ %@] sent %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), usingThisURL);
NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:usingThisURL] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];
NSLog(@"jsonData: [%@]",jsonData);
NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves error:&error] : nil;
NSLog(@"json NSDictionary results: [%@]", results);
if (error) NSLog(@"[%@ %@] JSON error: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), error.localizedDescription);
NSLog(@"[%@ %@] received %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), results);
return results;
}
的一个数据看起来是正确解析这样的,当我把它拉下来使用终端和一个 “卷曲-v” 命令:
{"Search":{"Athlete":
[{"@IDAthlete":"","@FirstName":"John","@LastName":"Doe","@Gender":"M","@IDSchool":"148","@SchoolName":"All American HS","@City":"Union","@State":"ST"},
{"@IDAthlete":"654321`","@FirstName":"Jane","@LastName":"Doe","@Gender":"F","@IDSchool":"18266","@SchoolName":"Any Ol HS","@City":"Union","@State":"ST"},]}}
不解析看起来像这样的数据:
{"ROOT":{"@xmlns:sql":"urn:schemas-microsoft-com:xml-sql"/* School Info */,"row":
{"@SelectedAthlete":"235434"},"HasTrack":{"@AthleteID":"235434"},"Athlete":
{"@IDAthlete":"235434","@SchoolID":"148","@FirstName":"Jane","@LastName":"Doe","@Gender":"F",
"SchType":[{"@SortID":"1","@SchoolType":"High School","@DispSchoolTypeAbbrev":"HS","School":
{"@IDSchool":"148","@RegionID":"1","@SchoolName":"All American","SchoolDivision":[{"@DivisionID":"21036","Season":{"@IDSeason":"2012","@Display":"2012","Grade":
{"@SingularGradeDesc":"11th Grade","@IDGrade":"11","Distance":[{"@Distance":"2600.00","@Units":"Meters","Result": ...
我唯一能想到的就是JSON对以xmlns:sql开头的描述感到窒息,或者说这表明我有一个XML文件而不是JSON格式。 (我之前已经用XML解析过这些数据。)
我可以简单地操纵数据吗?还是需要修改生成API?
感谢您的帮助!
答
您的第二个JSON有一个字符串,/* School Info */
,与"@xmlns:sql"
键关联的值之后。我不知道它是如何得到的(在JSON中间有一个C风格的评论是没有意义的),但是如果你把它拿出来,你应该是好的。
如果您使用的工具类似http://jsonlint.com,它可以帮助识别这些类型的问题。
谢谢,罗布,为答案和链接到jsonlint! – PhillipOReilly