using System.Collections;
using System.Collections.Generic;
using CsQuery.ExtensionMethods;
using CsQuery.ExtensionMethods.Internal;
using Newtonsoft.Json.Linq;
public static void Main()
string data = "{\"took\":78,\"timed_out\":false,\"_shards\":{\"total\":24,\"successful\":24,\"failed\":0},\"hits\":{\"total\":143126,\"max_score\":0,\"hits\":[]},\"aggregations\":{\"first_level_counts_aggs\":{\"doc_count_error_upper_bound\":0,\"sum_other_doc_count\":0,\"buckets\":[{\"key\":\"amazon warehouse\",\"doc_count\":143126,\"second_level_counts_aggs\":{\"doc_count_error_upper_bound\":0,\"sum_other_doc_count\":0,\"buckets\":[]},\"totaljobcount\":{\"value\":143126}}]}}}";
List<CountListElement> result = ConvetTwoLevelQueryToListOfCountListElement(data, "company.normalizedcompanyname.keyword", "company.name.keyword");
Console.WriteLine("result "+result.Count);
public static List<CountListElement> ConvetTwoLevelQueryToListOfCountListElement(string data, string firstkey, string secondkey)
List<CountListElement> resultValue = new List<CountListElement>();
List<KeyValuePair<string, string>> keys = new List<KeyValuePair<string, string>>();
var jsonResponse = (JObject)JsonConvert.DeserializeObject(data);
if (!jsonResponse.IsNullOrEmpty())
JToken aggresult = jsonResponse.SelectToken("aggregations");
Console.WriteLine(aggresult==null? "NULL!": "nah");
aggresult = aggresult.SelectToken("first_level_counts_aggs");
aggresult = (JArray)aggresult.SelectToken("buckets");
foreach (var agg in aggresult)
keys.Add(new KeyValuePair<string, string>(firstkey, agg.SelectToken("key").ToString()));
agg.SelectToken("totaljobcount")
var keyValueFirstOrDefault = agg.SelectToken("second_level_counts_aggs").SelectToken("buckets").FirstOrDefault();
string keyValue = keyValueFirstOrDefault==null?"":keyValueFirstOrDefault.SelectToken("key").ToString();
keys.Add(new KeyValuePair<string, string>(secondkey,keyValue));
resultValue.Add(new CountListElement { Key = keys.ToJSON(), Count = (int) valueh });
public class CountListElement {
public string Key { get; set; }
public long Count { get; set; }
public static class JsonExtensions
public static bool IsNullOrEmpty(this JToken jtoken)
jtoken.Type == JTokenType.Array && !jtoken.HasValues ||
jtoken.Type == JTokenType.Object && !jtoken.HasValues ||
jtoken.Type == JTokenType.String && jtoken.ToString() == string.Empty ||
jtoken.Type == JTokenType.Null;