使用SelectToken和LINQ查询JSON

时间:2014-12-12 13:45:04

标签: c# linq json.net

我有一堆json格式的财务数据,需要从中提取两条信息:

  • ticker symbols(例如AAPL,GOOG)
  • 每只股票所属的industry

这里是数据link以下,您可以看到json查看器中的数据:

enter image description here

这是我最近(非工作)尝试检索industry names

string url = "http://query.yahooapis.com/v1/public/yql?q=select%20%2A%20from%20yahoo.finance.industry%20where%20id%20in%20(select%20industry.id%20from%20yahoo.finance.sectors)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
string json = new WebClient().DownloadString(url);
JObject o = JObject.Parse(json);
IList<string> industries = o.SelectToken("query.results.industry").Select(s => (string)s).ToList();

如何检索ticker symbolsindustry names并以方便的方式存储它们(例如字符串数组或字典中)?

1 个答案:

答案 0 :(得分:2)

看起来Dictionary<string, IEnumerable<string>>可能非常适合这种情况。如果没有,这至少应该让您了解如何选择所需的信息:

Dictionary<string, IEnumerable<string>> industryData =
    o.SelectToken("query.results.industry")
        .ToDictionary(
            ind => ind["name"].ToString(),
            ind => ind["company"] != null ? 
                   ind["company"].Select(c => c["symbol"].ToString()) : null);

有条件是必要的,因为(至少)一个行业零公司(并且没有这个问题的名称)。这将为您提供一个字典,其中的关键字是行业名称,其值是IEnumerable<string>股票行情。