【问题标题】:How to use JSON request from YQL stock data?如何使用来自 YQL 股票数据的 JSON 请求?
【发布时间】:2013-09-08 01:48:49
【问题描述】:

我刚刚使用this answer 设置了来自雅虎财经的数据请求。如果你看一下这篇文章,你会看到它返回一个数据字典(在本例中为投标)和键(符号)。只是为了测试它,我使用了这段代码,但它继续崩溃:

NSArray *tickerArray = [[NSArray alloc] initWithObjects:@"AAPL", nil];
NSDictionary *quotes = [self fetchQuotesFor:tickerArray];

NSLog(@"%@",[quotes valueForKey:@"AAPL"]);

你能指出我做错了什么吗?我需要获取一个包含我要求的符号数据的字符串。

请注意:我的代码使用的是本文所基于的代码,即this

【问题讨论】:

  • 尝试至少使用两个代码而不是一个。

标签: ios json ios5 yql


【解决方案1】:

您喜欢的代码对从 API 返回的 JSON 数据的形状做出了错误的假设,并且您会收到标准的 KVC 错误。 reason: '[<__NSCFString 0x7685930> valueForUndefinedKey:]: this class is not key value coding-compliant for the key BidRealtime.'

通过一些调试,我得到了它的工作......

根据您的输入数组并稍微修改链接的函数,您需要像这样访问引用:

#define QUOTE_QUERY_PREFIX @"http://query.yahooapis.com/v1/public/yql?q=select%20symbol%2C%20BidRealtime%20from%20yahoo.finance.quotes%20where%20symbol%20in%20("
#define QUOTE_QUERY_SUFFIX @")&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback="

+ (NSDictionary *)fetchQuotesFor:(NSArray *)tickers {
  NSMutableDictionary *quotes;

  if (tickers && [tickers count] > 0) {
    NSMutableString *query = [[NSMutableString alloc] init];
    [query appendString:QUOTE_QUERY_PREFIX];

    for (int i = 0; i < [tickers count]; i++) {
      NSString *ticker = [tickers objectAtIndex:i];
      [query appendFormat:@"%%22%@%%22", ticker];
      if (i != [tickers count] - 1) [query appendString:@"%2C"];
    }

    [query appendString:QUOTE_QUERY_SUFFIX];

    NSData *jsonData = [[NSString stringWithContentsOfURL:[NSURL URLWithString:query] encoding:NSUTF8StringEncoding error:nil] dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *results = jsonData ? [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:nil] : nil;

    NSDictionary *quoteEntry = [results valueForKeyPath:@"query.results.quote"];
    return quoteEntry;
  }
  return quotes;
}

您会注意到我在此处发布的代码与您链接的函数之间的区别也是quoteEntry 的最终解析。我弄清楚了它对一些断点的作用,特别是在 all exceptions 上,这些断点将我引导到确切的行。

【讨论】:

  • 您的方法似乎正在返回一个 NULL 对象数组。我用的方法我得到了工作,但只是有时,所以我想用你的方法。你能给我看一个你使用这种方法的例子吗?
【解决方案2】:

您所要做的就是初始化 NSMutableDictionary!

NSMutableDictionary *quotes = [[NSMutableDictionary alloc] init];

顺便说一句,上面的那个人完全没有使用引号字典。直接返回quoteEntry。跳过一步。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多