2012-06-24 15 views
30

私は、iOS 5のiOS 5 JSONの解析結果3840

にJSON文字列の下に
{"States": [{"Name": "Arizona","Cities": [{"Name": "Phoenix"}]},{"Name": "California","Cities": [{"Name": "Orange County"},{"Name": "Riverside"},{"Name": "San Diego"},{"Name": "San Francisco"}]},{"Name": "Nevada","Cities": [{"Name": "Las Vegas"}]}]} 

を解析する苦労を抱えているとここに私のコードは次のとおりです。

- (void) parseJson { 
NSError *jsonError = nil; 
NSData *jsonData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"]]; 

if (jsonData) { 
    NSDictionary *jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&jsonError]; 

    if (jsonError) { 
     NSLog(@"JSON Error: %@", [jsonError localizedDescription]); 

     return; 
    } 

    NSLog(@"%@", jsonObjects); 
} 
} 

私は入れませんこのエラー:Iをクリアので、私はこの上でいくつかの助けをいただければと思います

JSON Error: The operation couldn’t be completed. (Cocoa error 3840.)

早く、これを修正することができません。間違ったとして私を打つ

+0

が、それが成功しjsonData設定していますか? –

答えて

22

ことの一つはこれです:あなたのデータは、RTFファイルである

[[NSBundle mainBundle] pathForResource:@"Locations-JSON" ofType:@"rtf"] 

txtファイル(または他の種類のプレーンテキストファイル)である必要があります。 RTFファイルは、通常はテキストの書式設定データが含まれ、このように:私はデータとしてことを読んで、JSONとしてそれを解析しようとすると

{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf470 
{\fonttbl\f0\fswiss\fcharset0 Helvetica;} 
{\colortbl;\red255\green255\blue255;} 
\margl1440\margr1440\vieww10800\viewh8400\viewkind0 
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural 

\f0\fs24 \cf0 \{"States": [\{"Name": "Arizona","Cities": [\{"Name": "Phoenix"\}]\},\{"Name": "California","Cities": [\{"Name": "Orange County"\},\{"Name": "Riverside"\},\{"Name": "San Diego"\},\{"Name": "San Francisco"\}]\},\{"Name": "Nevada","Cities": [\{"Name": "Las Vegas"\}]\}]\}} 

、私はあなたが見ている3840エラーが発生します。そのエラーの説明は次のようになります。

私には、実際にはJSONがないということがあります。 RTFデータがあります。

+1

はい、そうですね。男、私は今、本当に馬鹿だと感じる...助けをありがとう。 – Gup3rSuR4c

1

あなたが原因RTFのためにJSONでここに到着していない場合は、この答えをチェックアウトしてください: IOS JSON Deserialization failure - STIG/NSJSONSerializer

+1

このエラーは、無効なJSON(JSONオブジェクト定義の最後に後続;一般的なアドバイスは、多数のJSONバリデータWebページのいずれかを使用してJSONを検証することです。 –

10

私は同様の問題を打っていました。私のJSONパーサは、サーバーからJSONデータをダウンロードすると断続的に動作します。この関数からJSONデータを取得しましたか?

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 

この関数から返されるNSDataは部分データである可能性があります。 type:NSMutableDataを持つインスタンス変数にappendDataを追加する必要があります。次に、別の関数でJSONを次のように処理します。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

詳細については、この記事をお読みください。それは私がNSStringNSDataオブジェクトを変換することによって、私のJSON 3840エラーをトラブルシューティングすることができました

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html

10

私の作品:

NSError *error; 

NSObject *object = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

if (object == nil) { 
    NSString *serverResponse = [[NSString alloc] initWithData:responseData encoding:NSASCIIStringEncoding]; 

    NSLog(@"\n\nError:\n%@\n\nServer Response:\n%@\n\nCrash:", error.description, serverResponse); 
    [NSException raise:@"Invalid Data" format:@"Unable to process web server response."]; 
} 
+0

これは私を助けました。あなたはこの応答が@kraftydevilを意味するものであるかどうか考えていますか?サーバーで内部エラーが発生し、要求を完了できませんでした。サーバーが過負荷になっているか、アプリケーションにエラーがあります – SleepsOnNewspapers

+1

@ hsavit1私の知識はネイティブスペースで直ちに停止します。あなたのエラーは間違いなくサーバー/ Webサービスの問題ですが、それは私の頭の上です。 – kraftydevil

関連する問題