2013-06-29 96 views
0

我試圖解析託管在我的Google雲端硬盤上的json文件。我正在使用以下代碼:未解析託管在Google雲端硬盤上的JSON

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 


    NSURL* url = [NSURL URLWithString:@"https://docs.google.com/file/d/0B3CRs9y562F3a0VXTXNaekNiSXM/edit?usp=sharing"]; 

    NSURLRequest* request = [NSURLRequest requestWithURL:url]; 

    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
     if (!error) { 
      NSDictionary* jsonDictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
      NSLog(@"jsonDictionary \n%@", jsonDictionary); 
     } 
    }]; 


} 

我檢查了網址,並將其指定爲代碼或Google雲端硬盤無法訪問。如果代碼不好,我看不到它在哪裏。如果無法從Google雲端硬盤解析.json文件,我可以在哪裏主持有權訪問此內容?它必須在我自己的領域?我期待在Google Code上託管,但絕對看起來並不像我需要的版本控制,等等。

+0

說真的,這是:「我試圖解析託管在我的Google雲端硬盤上的json文件。」根本沒有意義。你如何處理HTTP GET請求是從服務器獲取數據。您可以在「Accept」標題中指定您希望的數據類型,例如「接受:application/json」。首先,最重要的是,您需要確保API完全支持該請求。收到響應時,請檢查狀態碼和響應標題(如果它們與您的期望相符)(狀態碼200 OK和「Content-Type:application/json」)。然後你可以用任何你想要的方式處理數據。 – CouchDeveloper

+0

@CD,你絕對正確。無法訪問.json,並且無法在GD中解析.txt。創建一個簡單的API花費的時間比花費這些規則不適用的時間長。 – aug2uag

+0

當然,如果該資源只是「文本」(與某些結構化數據相對),並且實際上是包含JSON的文本文檔,則可以指定「Accept:text/plain; charset = utf-8」。 「application/json」用於某個資源,例如某些數據庫中存在「Model」。如果您請求「application/json」,您將有效地指示服務器創建代表此模型的JSON文檔並將其傳遞給您。 – CouchDeveloper

回答

1

當我加載該網址時,我並沒有真正得到任何東西。另一種選擇可能是將文檔放在node.js api後面,並從那裏進行其他的調用,或者將它退回到AWS S3並從那裏撥打電話。我不認爲谷歌驅動器允許解析,除非首先下載所有文本。我認爲使用api將其託管在諸如heroku之類的服務上會爲您提供最好的服務。

+0

它最初是一個.txt文件(你可以在沒有下載的情況下閱讀那個文件),它沒有工作,所以我嘗試使用.json 沒有注意到文件必須被下載,但我想你上面說的是什麼是無關緊要的,也是最可能的解決方案。 – aug2uag

1
your json file format is not proper. Try this code you will get error what is wrong in 
your json File 

NSURL* url = [NSURL URLWithString:@"https://docs.google.com/file/d/0B3CRs9y562F3a0VXTXNaekNiSXM/edit?usp=sharing"]; 

    NSURLRequest* request = [NSURLRequest requestWithURL:url]; 

    NSData *response = [NSURLConnection sendSynchronousRequest:request 
              returningResponse:nil error:nil]; 
    NSError *jsonParsingError = nil; 
    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:response 
                   options:0 error:&jsonParsingError]; 
    if (!jsonArray) { 
         NSLog(@"Error parsing JSON: %@", [jsonParsingError description]); 
        } else { 
         for(NSDictionary *item in jsonArray) { 
          NSLog(@"Item: %@", item); 
         } 
        } 
+0

我已經嘗試過使用NSArray,因爲上面有一個txt,然後是上面的json url。似乎從Google文檔解析不是一種可能性,並且必須在準系統API上進行託管。此外,還試圖保持異步性。 – aug2uag

+0

+1,對JSON的要求很高,確實沒有驗證。乾杯! – aug2uag

+0

如果在主線程上,請不要在NSURLConnection中同步加載URL請求。它會阻止用戶界面。而是使用sendAsynchronousRequest:就像OP已經在後臺線程中使用或放置同步URLConnection請求一樣。 – 0x8badf00d

相關問題