2013-06-29 74 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

相关问题