using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using JsonDiffPatchDotNet;
public static void Main()
Console.WriteLine("Hello World");
var left = JToken.Parse(Minify(source));
var right = JToken.Parse(Minify(edited));
var jdp = new JsonDiffPatch();
var diff1 = jdp.Diff(left, right);
Console.WriteLine("--------------------------------------");
Console.WriteLine("----diff using JsonDiffPatchDotNet----");
Console.WriteLine("--------------------------------------");
Console.WriteLine(diff1);
Console.WriteLine("***************************************");
Console.WriteLine("***************************************\n\n");
var diff1PatchOutput = jdp.Patch(left, diff1).ToString();
var diffAnimalsIds = ((JObject)JObject.Parse(diff1.ToString())["JSON"]["ANIMALS"]).Properties().Select(p => p.Name);
var allAnimals = JObject.Parse(diff1PatchOutput)["JSON"]["ANIMALS"].Cast<JObject>();
var changedAnimals = allAnimals.Where(animal => diffAnimalsIds.Contains(((JValue)animal["ID"]).ToString()));
Console.WriteLine("--------------------------------------");
Console.WriteLine("---------- CURRENT OUTPUT --------");
Console.WriteLine("--------------------------------------");
Console.WriteLine(diff1PatchOutput);
Console.WriteLine(JsonConvert.SerializeObject(changedAnimals, Formatting.Indented).ToString());
Console.WriteLine("***************************************");
Console.WriteLine("***************************************\n\n");
Console.WriteLine("Diff failed or Invalid json inputs left and rigth !");
public static string Minify(string json)
return Regex.Replace(json, "(\"(?:[^\"\\\\]|\\\\.)*\")|\\s+", "$1");
public static string source = @"
""TYPE"": ""DIAGNOSTICS"",
""TYPE"": ""ORGANISATION"",
public static string edited = @"
""TYPE"": ""DIAGNOSTICS"",
""STATUS"": ""ENABLED ZZZ""
""TYPE"": ""ORGANISATION"",
""NAME"": ""RED CROSS ZZZ"",