-1

いくつかのURLからいくつかのデータをフェッチし、結果をnslogに出力したいと思います。URlを渡しており、結果をログのみで取得したいと考えています。私はこのコードを使用しました:

   -(void)GETJSONDATA
{
   NSString*lu=@"tmp";
    NSString *requestString = [[NSString alloc]init];

    // [[NSUserDefaults standardUserDefaults] setValue:nil forKey:@"WRONGANSWER"];

    NSLog(@"request string:%@",requestString);
    NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]];



    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: 
                                    [NSURL URLWithString: @"http://assessments.tlisc.org.au/webservices/questions/getbytaskpart.php?jsoncallback=?&token=1726204214321678|xTAieBBJoDaWmBsG1stxfq4zLO4&taskpartid=1"]];  
    NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];

    [request setHTTPMethod: @"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

    [request setHTTPBody:requestData];

    NSError *respError = nil;
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ];
    if (respError) 
    {
        //        NSString *msg = [NSString stringWithFormat:@"Connection failed! Error - %@ %@",
        //                         [respError localizedDescription],
        //                         [[respError userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]]; 
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Test"                                                  message:@"check your network connection" delegate:self cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];
        [alertView show];


    } 
    else
    {
        NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
        NSLog(@"Resp : %@",responseString);

        NSDictionary *results = [responseString JSONValue];
        NSLog(@"results=%@",results);




}
}

それは私にこのエラーを示しています:

 -JSONValue failed. Error trace is: (
    "Error Domain=org.brautaset.JSON.ErrorDomain Code=11 \"Unexpected end of string\" UserInfo=0x6a42be0 {NSLocalizedDescription=Unexpected end of string}"

誰かが私にエラーを指摘できますか?応答文字列では、null値を示しています。実際のエラーはわかりません。

ブラウザでは正常に動作していますが、解析するとこのエラーが表示されます....とにかくURLを変更して結果を取得する方法はありますか...別のURLでコードを確認しました。正常に動作しています..

4

4 に答える 4

0

エラーが示したように、着信JSONは整形式ではありません。使用しているURLに対して単純なGETリクエストを行うと、不正な形式のJSONが取得されます。つまり、有効なJSONではありません。このURLにデータを投稿すると、実際のデータを含む同じ形式が返されると思います(nullではありません)。

単純なJSONバリデーターを利用して、これを取得しています

5行目の解析エラー:... "説明": "\ n \ tQuestion Numbe ----------------------- ^'STRING'、'NUMBERが必要です'、' NULL'、' TRUE'、' FALSE'、' {'、' ['

于 2012-11-26T13:12:48.520 に答える
0

私はあなたがここで使用しているのと同じライブラリを使用していたと思います、そしていくつかの説明のつかない理由のためにそれは特定のグーグルAPIで失敗しました、時々結果を得ますが通常失敗します。コードに問題はないようです。

結局、組み込みのNSJSONSerialization(http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html)オブジェクトを使用しましたが、それ以降は失敗していません。JSONサポートが組み込まれていることすら知りませんでした(明らかにiOS5から)。

2つの呼び出しを実行して並べて処理しましたが、外部ライブラリが継続的に失敗しました。内部メソッドは正常に機能しました。

私は初心者であり、ドキュメント(上記)はあまり役に立たないので、このチュートリアルhttp://www.raywenderlich.com/5492/working-with-json-in-ios-5を使用して取得しましたその周りの私の頭

于 2012-11-26T13:19:34.893 に答える
0

ブラウザでURLを確認してください。結果を見てください。結果の構造はJSONと同じである必要があります。jsonの先頭に他の余分な単語がある場合は意味します。PHPコードを確認する必要があります。

于 2012-11-26T14:23:37.687 に答える
0

文字列内にHTMLタグがあります。のような段落マーク

<p> and </p>

そして、これらは適切に逃げられません。ただし、JSONで小なり記号と大なり記号をエスケープする必要があるかどうかはわかりませんが、問題が発生しているようです。グーグルを使用して、私は両方のステートメントを見つけます。ただし、一部のサイトでは、を使用してエスケープ<することを提案しています。それでうまくいくはずです。\u003c>\u003e

http://assessments.tlisc.org.au/webservices/questions/getbytaskpart.php?jsoncallback=?&token=1726204214321678|xTAieBBJoDaWmBsG1stxfq4zLO4&taskpartid=1<p>からの出力を検証しようとしました が</p>、バウザー。(私は「ページソース」を探していました)。ただし、エスケープしても文字列は有効であり、同じ結果にエンコードされます。

これがあなたの問題ではない場合は、あなたの出力を提供してください

NSLog(@"Resp : %@",responseString);
于 2012-11-26T18:25:56.903 に答える