1

yelp 検索結果から検証済みの JSON を解析しようとしています。

これは、期待どおりにjsonを正しく吐き出します(シミュレータブラウザと私自身で確認されています)。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    NSString *dump = [[[NSString alloc] initWithData: data encoding:NSUTF8StringEncoding] autorelease];
    
    NSLog(@"Did Recieve data: %@",  dump);
    [JSONData appendData:data];
}

しかし、接続の読み込みが完了すると、結果を抽出してデータを解析するのに苦労しています。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{   
    NSLog(@"Connection Did Finish Loading");
    
    NSError *error = nil;
    id cureLocations = [[CJSONDeserializer deserializer] deserializeAsDictionary:JSONData error:&error];
    [JSONData release];
        
    NSLog(@"Connection finished loading: %@", error);
}

取得: Connection finished loading: E​​rror Domain=CJSONDeserializerErrorDomain Code=-11 "操作を完了できませんでした。(CJSONDeserializerErrorDomain エラー -11.)"

そのフレームワークからも抽出できなかったため、SBJSONからTouchJSONに切り替えました。結果としてnullで辞書と配列にロードしようとしました。この時点で、私は何時間もキーボードで頭を悩ませてきました。

JSON サンプル

アップデート:

私はダミーです。JSONData を初期化していませんでした。お時間を無駄にしてしまったことをお詫び申し上げます。また、ご提案に感謝いたします。

4

2 に答える 2

1

SBJSON はかなりまともなよく知られたパーサーです。入力が解析されなかった場合は、入力が本当に悪いためだと思うでしょう。TouchJSON もそれを解析していない場合、入力は間違いなく悪いです。つまり、あなたJSONDataのオブジェクトには危険なことが起こっています。

メソッドで JSON データをコンソールに出力し、connectionDidFinishLoading再検証することをお勧めします。CJSON に渡すデータ オブジェクトの実際の内容を確認します。

于 2011-03-08T01:32:17.770 に答える
0

うーん、アプリケーションをさらに見直したところ、急いでサンプルをこのプロジェクトにコピーし、JSONData を初期化するのを忘れていたようです。

self.JSONData = [[[NSMutableData alloc] init]autorelease];

次に、didReceiveData メソッドを更新しました。

    - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [[self JSONData] appendData:data];
}

そして、すべてが期待どおりに機能するようになりました。このエラーに遭遇したのはこれで 2 回目です。デバッガーがそれを拾うといつも思っていたと思います。みんなの時間と援助に感謝します。

于 2011-03-22T22:00:33.497 に答える