Deep clone and recursive merge for Nim JsonNode
Nim
import std/json
proc mergeInto(dst: var JsonNode; src: JsonNode) =
if dst.kind != JObject or src.kind != JObject:
dst = src.copy()
return
for key, val in src:
if dst.hasKey(key):
mergeInto(dst[key], val)
else:
dst[key] = val.copy()
var base = parseJson("""{"a": 1, "nested": {"x": 1, "y": 2}}""")
let patch = parseJson("""{"nested": {"y": 20, "z": 30}, "b": 2}""")
mergeInto(base, patch)
echo base