using Newtonsoft.Json.Linq;
public static class Program
public static void Main(string[] args)
var json = JObject.Parse(@"{""DanaerysTargaryen"":{""Dragons"":{""Dragon1"":{""Name"": ""Drogon""}},""Hair"": {""Color"": ""White""}}}");
var toAdd = "DanaerysTargaryen.Dragons.Dragon1.Color";
var valueToAdd = "Black";
var pathParts = toAdd.Split('.');
for (int i = 0; i < pathParts.Length; i++)
var pathPart = pathParts[i];
var partNode = node.SelectToken(pathPart);
if (partNode == null && i < pathParts.Length - 1)
((JObject)node).Add(pathPart, new JObject());
partNode = node.SelectToken(pathPart);
else if (partNode == null && i == pathParts.Length - 1)
((JObject)node).Add(pathPart, valueToAdd);
partNode = node.SelectToken(pathPart);
Console.WriteLine(json.ToString());