Deep clone and recursive merge of JsonObject trees

C#
using System.Text.Json.Nodes;

static JsonNode Clone(JsonNode node) => JsonNode.Parse(node.ToJsonString())!;

static void Merge(JsonObject target, JsonObject source)
{
    foreach (var (key, value) in source)
    {
        if (value is JsonObject child && target[key] is JsonObject existing)
            Merge(existing, child);
        else
            target[key] = value is null ? null : JsonNode.Parse(value.ToJsonString());
    }
}