0

同じクラスとメソッドを使用して、特別に作成された 2 つの API を介してデータをダウンロードします。API の 1 つは正常に動作しますが、もう 1 つはエラー 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;
 }

ターミナルと「curl -v」コマンドを使用してプルダウンすると、次のように正しく解析されるデータが表示されます。

 {"Search":{"Athlete":
 [{"@IDAthlete":"0123456","@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 で始まる説明を詰まらせているか、JSON 形式ではなく XML ファイルを持っていることを示していることです。(以前にこのデータを XML で解析したことがあります。)

データをそのまま操作できますか?それとも、生成する API を変更する必要がありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

1

2 番目の JSON には/* School Info */、キーに関連付けられた値の後に文字列 , があり"@xmlns:sql"ます。どうやってそこに入ったのかはわかりません (JSON の途中に C スタイルのコメントがあっても意味がありません) が、それを取り除けば問題ないはずです。

http://jsonlint.comのようなツールを使用すると、この種の問題を特定するのに役立ちます。

于 2013-08-17T02:57:20.273 に答える