2012-06-24 75 views
30

我有一個很難解析如下JSON字符串在iOS 5可可錯誤的iOS 5 JSON解析結果3840

{"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); 
} 
} 

我不斷收到這個錯誤:

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

我會很感激這方面的一些幫助,因爲我CL早期無法解決這個問題。這在我看來是不正確

+0

是否設置成功jsonData? –

回答

22

有一件事情是這樣的:

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

你的數據是RTF文件?它應該是一個txt文件(或任何其他類型的純文本文件)。 RTF文件通常包含文本格式的數據,這樣的:

{\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"\}]\}]\}} 

當我作爲一個數據讀並嘗試分析它作爲JSON,我得到了3840的錯誤你看到。該錯誤的描述說:

The data couldn’t be read because it has been corrupted. (No string key for value in object around character 2.)

因此,它看起來像我沒有實際上有JSON。你有RTF數據。

+1

是的,你是對的,就是這樣。男人,我現在感覺真的很蠢......謝謝你的幫忙。 – Gup3rSuR4c

1

如果你來到這裏,因爲JSON的,而不是RTF的,因爲請了這樣的回答: IOS JSON Deserialization failure - STIG/NSJSONSerializer

+1

我從剛纔有無效的JSON(拖尾;在JSON對象定義的末尾)得到這個錯誤。通用建議可能是使用任何JSON驗證器網頁來驗證您的JSON。 –

10

我擊中了類似的問題。我從服務器下載JSON數據時,我的JSON解析器間歇性地工作。你從這個函數中獲得了你的JSON數據嗎?

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

從該函數返回的NSData可能是部分數據。您需要將數據附加到類型爲NSMutableData的實例變量。然後,您在另一個功能中處理您的JSON,如下所示:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

閱讀本文以瞭解詳細信息。它爲我

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

10

我能夠通過轉換NSData對象來解決我的JSON 3840錯誤的NSString

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我的知識停留在本地空間。你的錯誤肯定是服務器/網絡服務的問題,但它是我的頭。 – kraftydevil