mirror of
https://github.com/DaveGamble/cJSON.git
synced 2023-08-10 21:13:26 +03:00
refactor cJSONUtils_MergePatch
This commit is contained in:
@ -1145,8 +1145,10 @@ CJSON_PUBLIC(void) cJSONUtils_SortObject(cJSON * const object)
|
||||
object->child = cJSONUtils_SortList(object->child);
|
||||
}
|
||||
|
||||
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, cJSON *patch)
|
||||
CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, const cJSON * const patch)
|
||||
{
|
||||
cJSON *patch_child = NULL;
|
||||
|
||||
if (!cJSON_IsObject(patch))
|
||||
{
|
||||
/* scalar value, array or NULL, just duplicate */
|
||||
@ -1160,20 +1162,20 @@ CJSON_PUBLIC(cJSON *) cJSONUtils_MergePatch(cJSON *target, cJSON *patch)
|
||||
target = cJSON_CreateObject();
|
||||
}
|
||||
|
||||
patch = patch->child;
|
||||
while (patch)
|
||||
patch_child = patch->child;
|
||||
while (patch_child != NULL)
|
||||
{
|
||||
if (cJSON_IsNull(patch))
|
||||
if (cJSON_IsNull(patch_child))
|
||||
{
|
||||
/* NULL is the indicator to remove a value, see RFC7396 */
|
||||
cJSON_DeleteItemFromObject(target, patch->string);
|
||||
cJSON_DeleteItemFromObject(target, patch_child->string);
|
||||
}
|
||||
else
|
||||
{
|
||||
cJSON *replaceme = cJSON_DetachItemFromObject(target, patch->string);
|
||||
cJSON_AddItemToObject(target, patch->string, cJSONUtils_MergePatch(replaceme, patch));
|
||||
cJSON *replace_me = cJSON_DetachItemFromObject(target, patch_child->string);
|
||||
cJSON_AddItemToObject(target, patch_child->string, cJSONUtils_MergePatch(replace_me, patch_child));
|
||||
}
|
||||
patch = patch->next;
|
||||
patch_child = patch_child->next;
|
||||
}
|
||||
return target;
|
||||
}
|
||||
|
Reference in New Issue
Block a user