public static async Task<JSONDiff> Process(APICall data) { JToken d1; JToken d2; JSONExtract j = new JSONExtract(); var jsonresultitem = new JSONDiff(data.API1, data.API2); try { d1 = await GetApi(j, data.API1); } catch (Exception ex) { jsonresultitem.AddItemAPI1(JSONWarnLevel.Fatal, "error reading url", ex); return jsonresultitem; } try { d2 = await GetApi(j, data.API2); } catch (Exception ex) { jsonresultitem.AddItemAPI2(JSONWarnLevel.Fatal, "error reading url", ex); return jsonresultitem; } try { JsonDifferenceReport(d1, d2, jsonresultitem, "root"); } catch (Exception ex) { jsonresultitem.AddItemAPI2(JSONWarnLevel.Fatal, "error diffing json", ex); return jsonresultitem; } if (jsonresultitem.Messages.Any()) { //filter based on parent count var messages = jsonresultitem.Messages.GroupBy(s => s.Message).Select(s => s).ToList(); foreach (var g in messages) { var gc = g.Count(); foreach (var m in g.Skip(1)) { jsonresultitem.Messages.Remove(m); } g.First().Message = g.First().Message + $"[reoccured {gc} times]"; } } return jsonresultitem; }
public static async Task<JToken> GetApi(JSONExtract j, string url) { var raw = await j.DownloadPage(url, null, "GET"); JToken token = JToken.Parse(raw); return token; }