mirror of
https://github.com/DaveGamble/cJSON.git
synced 2024-12-27 14:14:07 +08:00
Convert cJSON_Add...ToObject macros into functions
These functions return the added object. Functions to add objects and arrays have also been added.
This commit is contained in:
parent
f966409b33
commit
5865faffa3
108
cJSON.c
108
cJSON.c
@ -1958,6 +1958,114 @@ CJSON_PUBLIC(void) cJSON_AddItemReferenceToObject(cJSON *object, const char *str
|
|||||||
add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false);
|
add_item_to_object(object, string, create_reference(item, &global_hooks), &global_hooks, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name)
|
||||||
|
{
|
||||||
|
cJSON *null = cJSON_CreateNull();
|
||||||
|
if (add_item_to_object(object, name, null, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(null);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name)
|
||||||
|
{
|
||||||
|
cJSON *true_item = cJSON_CreateTrue();
|
||||||
|
if (add_item_to_object(object, name, true_item, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return true_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(true_item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name)
|
||||||
|
{
|
||||||
|
cJSON *false_item = cJSON_CreateFalse();
|
||||||
|
if (add_item_to_object(object, name, false_item, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return false_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(false_item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean)
|
||||||
|
{
|
||||||
|
cJSON *bool_item = cJSON_CreateBool(boolean);
|
||||||
|
if (add_item_to_object(object, name, bool_item, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return bool_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(bool_item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number)
|
||||||
|
{
|
||||||
|
cJSON *number_item = cJSON_CreateNumber(number);
|
||||||
|
if (add_item_to_object(object, name, number_item, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return number_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(number_item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string)
|
||||||
|
{
|
||||||
|
cJSON *string_item = cJSON_CreateString(string);
|
||||||
|
if (add_item_to_object(object, name, string_item, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return string_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(string_item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw)
|
||||||
|
{
|
||||||
|
cJSON *raw_item = cJSON_CreateRaw(raw);
|
||||||
|
if (add_item_to_object(object, name, raw_item, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return raw_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(raw_item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name)
|
||||||
|
{
|
||||||
|
cJSON *object_item = cJSON_CreateObject();
|
||||||
|
if (add_item_to_object(object, name, object_item, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return object_item;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(object_item);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name)
|
||||||
|
{
|
||||||
|
cJSON *array = cJSON_CreateArray();
|
||||||
|
if (add_item_to_object(object, name, array, &global_hooks, false))
|
||||||
|
{
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
|
cJSON_Delete(array);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item)
|
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item)
|
||||||
{
|
{
|
||||||
if ((parent == NULL) || (item == NULL))
|
if ((parent == NULL) || (item == NULL))
|
||||||
|
16
cJSON.h
16
cJSON.h
@ -246,13 +246,15 @@ CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * cons
|
|||||||
CJSON_PUBLIC(void) cJSON_Minify(char *json);
|
CJSON_PUBLIC(void) cJSON_Minify(char *json);
|
||||||
|
|
||||||
/* Macros for creating things quickly. */
|
/* Macros for creating things quickly. */
|
||||||
#define cJSON_AddNullToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateNull())
|
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
|
||||||
#define cJSON_AddTrueToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateTrue())
|
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
|
||||||
#define cJSON_AddFalseToObject(object,name) cJSON_AddItemToObject(object, name, cJSON_CreateFalse())
|
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
|
||||||
#define cJSON_AddBoolToObject(object,name,b) cJSON_AddItemToObject(object, name, cJSON_CreateBool(b))
|
CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
|
||||||
#define cJSON_AddNumberToObject(object,name,n) cJSON_AddItemToObject(object, name, cJSON_CreateNumber(n))
|
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
|
||||||
#define cJSON_AddStringToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateString(s))
|
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
|
||||||
#define cJSON_AddRawToObject(object,name,s) cJSON_AddItemToObject(object, name, cJSON_CreateRaw(s))
|
CJSON_PUBLIC(cJSON*) cJSON_AddRawToObject(cJSON * const object, const char * const name, const char * const raw);
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddObjectToObject(cJSON * const object, const char * const name);
|
||||||
|
CJSON_PUBLIC(cJSON*) cJSON_AddArrayToObject(cJSON * const object, const char * const name);
|
||||||
|
|
||||||
/* When assigning an integer value, it needs to be propagated to valuedouble too. */
|
/* When assigning an integer value, it needs to be propagated to valuedouble too. */
|
||||||
#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
|
#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
|
||||||
|
@ -130,6 +130,30 @@ static void cjson_add_raw_should_add_raw(void)
|
|||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cJSON_add_object_should_add_object(void)
|
||||||
|
{
|
||||||
|
cJSON *root = cJSON_CreateObject();
|
||||||
|
cJSON *object = NULL;
|
||||||
|
|
||||||
|
cJSON_AddObjectToObject(root, "object");
|
||||||
|
TEST_ASSERT_NOT_NULL(object = cJSON_GetObjectItemCaseSensitive(root, "object"));
|
||||||
|
TEST_ASSERT_EQUAL_INT(object->type, cJSON_Object);
|
||||||
|
|
||||||
|
cJSON_Delete(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void cJSON_add_array_should_add_array(void)
|
||||||
|
{
|
||||||
|
cJSON *root = cJSON_CreateObject();
|
||||||
|
cJSON *array = NULL;
|
||||||
|
|
||||||
|
cJSON_AddArrayToObject(root, "array");
|
||||||
|
TEST_ASSERT_NOT_NULL(array = cJSON_GetObjectItemCaseSensitive(root, "array"));
|
||||||
|
TEST_ASSERT_EQUAL_INT(array->type, cJSON_Array);
|
||||||
|
|
||||||
|
cJSON_Delete(root);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
UNITY_BEGIN();
|
UNITY_BEGIN();
|
||||||
@ -140,6 +164,9 @@ int main(void)
|
|||||||
RUN_TEST(cjson_add_bool_should_add_bool);
|
RUN_TEST(cjson_add_bool_should_add_bool);
|
||||||
RUN_TEST(cjson_add_number_should_add_number);
|
RUN_TEST(cjson_add_number_should_add_number);
|
||||||
RUN_TEST(cjson_add_string_should_add_string);
|
RUN_TEST(cjson_add_string_should_add_string);
|
||||||
|
RUN_TEST(cjson_add_raw_should_add_raw);
|
||||||
|
RUN_TEST(cJSON_add_object_should_add_object);
|
||||||
|
RUN_TEST(cJSON_add_array_should_add_array);
|
||||||
|
|
||||||
return UNITY_END();
|
return UNITY_END();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user