Refactored into JsonDiffer and JsonPatcher classes in order to reduce responsibilities of PatchDocument