cJSON使用说明

1.下载链接

DaveGamble/cJSON:ANSI C 语言中的超轻量级 JSON 解析器

GitHub - DaveGamble/cJSON: Ultralightweight JSON parser in ANSI C

复制代码
git clone https://github.com/DaveGamble/cJSON.git

2.只需导入

复制代码
cJSON/cJSON.c
cJSON/cJSON.h 

3.API讲解

复制代码
/* cJSON Types: */
#define cJSON_Invalid (0)
#define cJSON_False  (1 << 0)
#define cJSON_True   (1 << 1)
#define cJSON_NULL   (1 << 2)
#define cJSON_Number (1 << 3)
#define cJSON_String (1 << 4)
#define cJSON_Array  (1 << 5)
#define cJSON_Object (1 << 6)
#define cJSON_Raw    (1 << 7) /* raw json */
​
#define cJSON_IsReference 256
#define cJSON_StringIsConst 512
​
/* The cJSON structure: */
typedef struct cJSON
{
    /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
    struct cJSON *next;
    struct cJSON *prev;
    /* An array or object item will have a child pointer pointing to a chain of the items in the array/object. */
    struct cJSON *child;
​
    /* The type of the item, as above. */
    int type;
​
    /* The item's string, if type==cJSON_String  and type == cJSON_Raw */
    char *valuestring;
    /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */
    int valueint;
    /* The item's number, if type==cJSON_Number */
    double valuedouble;
​
    /* The item's name string, if this item is the child of, or is in the list of subitems of an object. */
    char *string;
} cJSON;
​
typedef struct cJSON_Hooks
{
      /* malloc/free are CDECL on Windows regardless of the default calling convention of the compiler, so ensure the hooks allow passing those functions directly. */
      void *(CJSON_CDECL *malloc_fn)(size_t sz);
      void (CJSON_CDECL *free_fn)(void *ptr);
} cJSON_Hooks;
​
typedef int cJSON_bool;
​
/* Limits how deeply nested arrays/objects can be before cJSON rejects to parse them.
 * This is to prevent stack overflows. */
#ifndef CJSON_NESTING_LIMIT
#define CJSON_NESTING_LIMIT 1000
#endif
​
/* Limits the length of circular references can be before cJSON rejects to parse them.
 * This is to prevent stack overflows. */
#ifndef CJSON_CIRCULAR_LIMIT
#define CJSON_CIRCULAR_LIMIT 10000
#endif
​
/* returns the version of cJSON as a string */
CJSON_PUBLIC(const char*) cJSON_Version(void);
​
/* Supply malloc, realloc and free functions to cJSON */
CJSON_PUBLIC(void) cJSON_InitHooks(cJSON_Hooks* hooks);
​
/* Memory Management: the caller is always responsible to free the results from all variants of cJSON_Parse (with cJSON_Delete) and cJSON_Print (with stdlib free, cJSON_Hooks.free_fn, or cJSON_free as appropriate). The exception is cJSON_PrintPreallocated, where the caller has full responsibility of the buffer. */
/* Supply a block of JSON, and this returns a cJSON object you can interrogate. */
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length);
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated);
​
/* Render a cJSON entity to text for transfer/storage. */
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
/* Render a cJSON entity to text for transfer/storage without any formatting. */
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);
/* Delete a cJSON entity and all subentities. */
CJSON_PUBLIC(void) cJSON_Delete(cJSON *item);
​
/* Returns the number of items in an array (or object). */
CJSON_PUBLIC(int) cJSON_GetArraySize(const cJSON *array);
/* Retrieve item number "index" from array "array". Returns NULL if unsuccessful. */
CJSON_PUBLIC(cJSON *) cJSON_GetArrayItem(const cJSON *array, int index);
/* Get item "string" from object. Case insensitive. */
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItem(const cJSON * const object, const char * const string);
CJSON_PUBLIC(cJSON *) cJSON_GetObjectItemCaseSensitive(const cJSON * const object, const char * const string);
CJSON_PUBLIC(cJSON_bool) cJSON_HasObjectItem(const cJSON *object, const char *string);
/* For analysing failed parses. This returns a pointer to the parse error. You'll probably need to look a few chars back to make sense of it. Defined when cJSON_Parse() returns 0. 0 when cJSON_Parse() succeeds. */
CJSON_PUBLIC(const char *) cJSON_GetErrorPtr(void);
​
/* Check item type and return its value */
CJSON_PUBLIC(char *) cJSON_GetStringValue(const cJSON * const item);
CJSON_PUBLIC(double) cJSON_GetNumberValue(const cJSON * const item);
​
/* These functions check the type of an item */
CJSON_PUBLIC(cJSON_bool) cJSON_IsInvalid(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsFalse(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsTrue(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsBool(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsNull(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsNumber(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsString(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsArray(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsObject(const cJSON * const item);
CJSON_PUBLIC(cJSON_bool) cJSON_IsRaw(const cJSON * const item);
​
/* These calls create a cJSON item of the appropriate type. */
CJSON_PUBLIC(cJSON *) cJSON_CreateNull(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateTrue(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateFalse(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateBool(cJSON_bool boolean);
CJSON_PUBLIC(cJSON *) cJSON_CreateNumber(double num);
CJSON_PUBLIC(cJSON *) cJSON_CreateString(const char *string);
/* raw json */
CJSON_PUBLIC(cJSON *) cJSON_CreateRaw(const char *raw);
CJSON_PUBLIC(cJSON *) cJSON_CreateArray(void);
CJSON_PUBLIC(cJSON *) cJSON_CreateObject(void);
​
/* Create a string where valuestring references a string so
 * it will not be freed by cJSON_Delete */
CJSON_PUBLIC(cJSON *) cJSON_CreateStringReference(const char *string);
/* Create an object/array that only references it's elements so
 * they will not be freed by cJSON_Delete */
CJSON_PUBLIC(cJSON *) cJSON_CreateObjectReference(const cJSON *child);
CJSON_PUBLIC(cJSON *) cJSON_CreateArrayReference(const cJSON *child);
​
/* These utilities create an Array of count items.
 * The parameter count cannot be greater than the number of elements in the number array, otherwise array access will be out of bounds.*/
CJSON_PUBLIC(cJSON *) cJSON_CreateIntArray(const int *numbers, int count);
CJSON_PUBLIC(cJSON *) cJSON_CreateFloatArray(const float *numbers, int count);
CJSON_PUBLIC(cJSON *) cJSON_CreateDoubleArray(const double *numbers, int count);
CJSON_PUBLIC(cJSON *) cJSON_CreateStringArray(const char *const *strings, int count);
​
/* Append item to the specified array/object. */
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToArray(cJSON *array, cJSON *item);
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObject(cJSON *object, const char *string, cJSON *item);
/* Use this when string is definitely const (i.e. a literal, or as good as), and will definitely survive the cJSON object.
 * WARNING: When this function was used, make sure to always check that (item->type & cJSON_StringIsConst) is zero before
 * writing to `item->string` */
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemToObjectCS(cJSON *object, const char *string, cJSON *item);
/* Append reference to item to the specified array/object. Use this when you want to add an existing cJSON to a new cJSON, but don't want to corrupt your existing cJSON. */
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToArray(cJSON *array, cJSON *item);
CJSON_PUBLIC(cJSON_bool) cJSON_AddItemReferenceToObject(cJSON *object, const char *string, cJSON *item);
​
/* Remove/Detach items from Arrays/Objects. */
CJSON_PUBLIC(cJSON *) cJSON_DetachItemViaPointer(cJSON *parent, cJSON * const item);
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromArray(cJSON *array, int which);
CJSON_PUBLIC(void) cJSON_DeleteItemFromArray(cJSON *array, int which);
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObject(cJSON *object, const char *string);
CJSON_PUBLIC(cJSON *) cJSON_DetachItemFromObjectCaseSensitive(cJSON *object, const char *string);
CJSON_PUBLIC(void) cJSON_DeleteItemFromObject(cJSON *object, const char *string);
CJSON_PUBLIC(void) cJSON_DeleteItemFromObjectCaseSensitive(cJSON *object, const char *string);
​
/* Update array items. */
CJSON_PUBLIC(cJSON_bool) cJSON_InsertItemInArray(cJSON *array, int which, cJSON *newitem); /* Shifts pre-existing items to the right. */
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemViaPointer(cJSON * const parent, cJSON * const item, cJSON * replacement);
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInArray(cJSON *array, int which, cJSON *newitem);
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObject(cJSON *object,const char *string,cJSON *newitem);
CJSON_PUBLIC(cJSON_bool) cJSON_ReplaceItemInObjectCaseSensitive(cJSON *object,const char *string,cJSON *newitem);
​
/* Duplicate a cJSON item */
CJSON_PUBLIC(cJSON *) cJSON_Duplicate(const cJSON *item, cJSON_bool recurse);
/* Duplicate will create a new, identical cJSON item to the one you pass, in new memory that will
 * need to be released. With recurse!=0, it will duplicate any children connected to the item.
 * The item->next and ->prev pointers are always zero on return from Duplicate. */
/* Recursively compare two cJSON items for equality. If either a or b is NULL or invalid, they will be considered unequal.
 * case_sensitive determines if object keys are treated case sensitive (1) or case insensitive (0) */
CJSON_PUBLIC(cJSON_bool) cJSON_Compare(const cJSON * const a, const cJSON * const b, const cJSON_bool case_sensitive);
​
/* Minify a strings, remove blank characters(such as ' ', '\t', '\r', '\n') from strings.
 * The input pointer json cannot point to a read-only address area, such as a string constant, 
 * but should point to a readable and writable address area. */
CJSON_PUBLIC(void) cJSON_Minify(char *json);
​
/* Helper functions for creating and adding items to an object at the same time.
 * They return the added item or NULL on failure. */
CJSON_PUBLIC(cJSON*) cJSON_AddNullToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddTrueToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddFalseToObject(cJSON * const object, const char * const name);
CJSON_PUBLIC(cJSON*) cJSON_AddBoolToObject(cJSON * const object, const char * const name, const cJSON_bool boolean);
CJSON_PUBLIC(cJSON*) cJSON_AddNumberToObject(cJSON * const object, const char * const name, const double number);
CJSON_PUBLIC(cJSON*) cJSON_AddStringToObject(cJSON * const object, const char * const name, const char * const string);
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. */
#define cJSON_SetIntValue(object, number) ((object) ? (object)->valueint = (object)->valuedouble = (number) : (number))
/* helper for the cJSON_SetNumberValue macro */
CJSON_PUBLIC(double) cJSON_SetNumberHelper(cJSON *object, double number);
#define cJSON_SetNumberValue(object, number) ((object != NULL) ? cJSON_SetNumberHelper(object, (double)number) : (number))
/* Change the valuestring of a cJSON_String object, only takes effect when type of object is cJSON_String */
CJSON_PUBLIC(char*) cJSON_SetValuestring(cJSON *object, const char *valuestring);
​
/* If the object is not a boolean type this does nothing and returns cJSON_Invalid else it returns the new type*/
#define cJSON_SetBoolValue(object, boolValue) ( \
    (object != NULL && ((object)->type & (cJSON_False|cJSON_True))) ? \
    (object)->type=((object)->type &(~(cJSON_False|cJSON_True)))|((boolValue)?cJSON_True:cJSON_False) : \
    cJSON_Invalid\
)
​
/* Macro for iterating over an array or object */
#define cJSON_ArrayForEach(element, array) for(element = (array != NULL) ? (array)->child : NULL; element != NULL; element = element->next)
​
/* malloc/free objects using the malloc/free functions that have been set with cJSON_InitHooks */
CJSON_PUBLIC(void *) cJSON_malloc(size_t size);
CJSON_PUBLIC(void) cJSON_free(void *object);

4.使用

4.1 cJSON_Parse

复制代码
CJSON_PUBLIC(cJSON *) cJSON_Parse(const char *value);
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLength(const char *value, size_t buffer_length);
/* ParseWithOpts allows you to require (and check) that the JSON is null terminated, and to retrieve the pointer to the final byte parsed. */
/* If you supply a ptr in return_parse_end and parsing fails, then return_parse_end will contain a pointer to the error so will match cJSON_GetErrorPtr(). */
CJSON_PUBLIC(cJSON *) cJSON_ParseWithOpts(const char *value, const char **return_parse_end, cJSON_bool require_null_terminated);
CJSON_PUBLIC(cJSON *) cJSON_ParseWithLengthOpts(const char *value, size_t buffer_length, const char **return_parse_end, cJSON_bool require_null_terminated);

4.2 cJSON_Print

复制代码
/* Render a cJSON entity to text for transfer/storage. */
CJSON_PUBLIC(char *) cJSON_Print(const cJSON *item);
/* Render a cJSON entity to text for transfer/storage without any formatting. */
CJSON_PUBLIC(char *) cJSON_PrintUnformatted(const cJSON *item);
/* Render a cJSON entity to text using a buffered strategy. prebuffer is a guess at the final size. guessing well reduces reallocation. fmt=0 gives unformatted, =1 gives formatted */
CJSON_PUBLIC(char *) cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt);
/* Render a cJSON entity to text using a buffer already allocated in memory with given length. Returns 1 on success and 0 on failure. */
/* NOTE: cJSON is not always 100% accurate in estimating how much memory it will use, so to be safe allocate 5 bytes more than you actually need */
CJSON_PUBLIC(cJSON_bool) cJSON_PrintPreallocated(cJSON *item, char *buffer, const int length, const cJSON_bool format);

4.2.1 cJSON_Print

复制代码
#include <stdio.h>
#include <cjson/cjson.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON_AddItemToObject(root, "name", cJSON_CreateString("John"));
    cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(30));
​
    char *json_string = cJSON_Print(root);
    printf("%s\n", json_string);
​
    // 释放内存
    cJSON_free(root);
    free(json_string);
​
    return 0;
}

4.2.2 cJSON_PrintUnformatted

复制代码
#include <stdio.h>
#include <cjson/cjson.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON_AddItemToObject(root, "name", cJSON_CreateString("John"));
    cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(30));
​
    char *json_string = cJSON_PrintUnformatted(root);
    printf("%s\n", json_string);
​
    cJSON_free(root);
    free(json_string);
​
    return 0;
}

4.2.3 cJSON_PrintBuffered

复制代码
#include <stdio.h>
#include <cjson/cjson.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    // 假设这里添加了大量的键值对到root对象中
​
    // 预估字符串大小为1024字节
    int prebuffer = 1024;
    char *json_string = cJSON_PrintBuffered(root, prebuffer, 1);
    printf("%s\n", json_string);
​
    cJSON_free(root);
    free(json_string);
​
    return 0;
}

4.2.4 cJSON_PrintPreallocated

复制代码
#include <stdio.h>
#include <cjson/cjson.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON_AddItemToObject(root, "name", cJSON_CreateString("John"));
    cJSON_AddItemToObject(root, "age", cJSON_CreateNumber(30));
​
    // 假设预先分配了200字节的缓冲区
    char buffer[200];
    cJSON_bool success = cJSON_PrintPreallocated(root, buffer, sizeof(buffer), 1);
    if (success) {
        printf("%s\n", buffer);
    } else {
        printf("Error: Failed to print cJSON to preallocated buffer.\n");
    }
​
    cJSON_free(root);
​
    return 0;
}

4.3

4.3.1 cJSON_Delete

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"name\":\"John\", \"age\":30}";
    cJSON *root = cJSON_Parse(json_string);
    if (root) {
        // 在这里可以对解析后的JSON数据进行操作
        //...
        // 操作完成后,删除整个JSON结构
        cJSON_Delete(root);
    }
    return 0;
}
​

4.3.2 cJSON_GetArraySize

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "[1, 2, 3, 4, 5]";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsArray(root)) {
        int size = cJSON_GetArraySize(root);
        for (int i = 0; i < size; i++) {
            cJSON *item = cJSON_GetArrayItem(root, i);
            if (cJSON_IsNumber(item)) {
                printf("%d ", item->valueint);
            }
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.3.3 cJSON_GetArrayItem

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "[\"apple\", \"banana\", \"cherry\"]";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsArray(root)) {
        cJSON *item = cJSON_GetArrayItem(root, 1);
        if (item) {
            printf("The second item in the array is: %s\n", item->valuestring);
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.3.4 cJSON_GetObjectItem

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"NaMe\":\"John\", \"AGE\":30}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *name = cJSON_GetObjectItem(root, "name");
        if (name) {
            printf("Name: %s\n", name->valuestring);
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.3.5 cJSON_GetObjectItemCaseSensitive

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"Name\":\"John\", \"Age\":30}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *name = cJSON_GetObjectItemCaseSensitive(root, "Name");
        if (name) {
            printf("Name: %s\n", name->valuestring);
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.3.6 cJSON_HasObjectItem

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"name\":\"John\", \"age\":30}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        if (cJSON_HasObjectItem(root, "name")) {
            cJSON *name = cJSON_GetObjectItem(root, "name");
            printf("Name: %s\n", name->valuestring);
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.3.7 cJSON_GetErrorPtr

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"name\":\"John\", \"age\":30";// 这里故意缺少一个右花括号
    cJSON *root = cJSON_Parse(json_string);
    if (!root) {
        const char *error_ptr = cJSON_GetErrorPtr();
        if (error_ptr) {
            fprintf(stderr, "Error before: %s\n", error_ptr);
        }
    }
    return 0;
}
​

4.4

4.4.1 cJSON_GetStringValue

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"name\":\"John\"}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *name_item = cJSON_GetObjectItem(root, "name");
        if (name_item) {
            char *name = cJSON_GetStringValue(name_item);
            if (name) {
                printf("The name is: %s\n", name);
            }
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.2 cJSON_GetNumberValue

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"age\":30}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *age_item = cJSON_GetObjectItem(root, "age");
        if (age_item) {
            double age = cJSON_GetNumberValue(age_item);
            printf("The age is: %.0f\n", age);
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.3 cJSON_IsInvalid

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"name\":\"John\", \"age\":30";// 这里故意造成解析错误
    cJSON *root = cJSON_Parse(json_string);
    if (cJSON_IsInvalid(root)) {
        printf("The cJSON structure is invalid.\n");
    } else {
        // 如果有效则进行正常操作
        //...
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.4 cJSON_IsFalse

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"is_active\": false}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *is_active_item = cJSON_GetObjectItem(root, "is_active");
        if (cJSON_IsFalse(is_active_item)) {
            printf("The flag is false.\n");
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.5 cJSON_IsTrue

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"is_enabled\": true}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *is_enabled_item = cJSON_GetObjectItem(root, "is_enabled");
        if (cJSON_IsTrue(is_enabled_item)) {
            printf("The flag is true.\n");
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.6 cJSON_IsBool

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"is_admin\": true, \"name\":\"John\"}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *is_admin_item = cJSON_GetObjectItem(root, "is_admin");
        if (cJSON_IsBool(is_admin_item)) {
            if (cJSON_IsTrue(is_admin_item)) {
                printf("The user is an admin.\n");
            } else {
                printf("The user is not an admin.\n");
            }
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.7 cJSON_IsNull

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"address\": null, \"name\":\"John\"}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *address_item = cJSON_GetObjectItem(root, "address");
        if (cJSON_IsNull(address_item)) {
            printf("The address is null.\n");
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.8 cJSON_IsNumber

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"price\": 10.5, \"name\":\"Product\"}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *price_item = cJSON_GetObjectItem(root, "price");
        if (cJSON_IsNumber(price_item)) {
            double price = cJSON_GetNumberValue(price_item);
            printf("The price is: %.2f\n", price);
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.9 cJSON_IsString

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"description\": \"This is a product\", \"id\":1}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *description_item = cJSON_GetObjectItem(root, "description");
        if (cJSON_IsString(description_item)) {
            char *description = cJSON_GetStringValue(description_item);
            printf("The description is: %s\n", description);
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.10 cJSON_IsArray

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"products\":[{\"name\":\"Product1\", \"price\":10}, {\"name\":\"Product2\", \"price\":20}]}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *products_item = cJSON_GetObjectItem(root, "products");
        if (cJSON_IsArray(products_item)) {
            int size = cJSON_GetArraySize(products_item);
            for (int i = 0; i < size; i++) {
                cJSON *product = cJSON_GetArrayItem(products_item, i);
                if (cJSON_IsObject(product)) {
                    cJSON *name_item = cJSON_GetObjectItem(product, "name");
                    if (name_item && cJSON_IsString(name_item)) {
                        char *name = cJSON_GetStringValue(name_item);
                        printf("Product name: %s\n", name);
                    }
                }
            }
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.11 cJSON_IsObject

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"user\":{\"name\":\"John\", \"age\":30}}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *user_item = cJSON_GetObjectItem(root, "user");
        if (cJSON_IsObject(user_item)) {
            cJSON *name_item = cJSON_GetObjectItem(user_item, "name");
            if (name_item && cJSON_IsString(name_item)) {
                char *name = cJSON_GetStringValue(name_item);
                printf("User name: %s\n", name);
            }
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.4.12 cJSON_IsRaw

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    const char *json_string = "{\"raw_data\":\"<some_raw_content>\", \"name\":\"John\"}";
    cJSON *root = cJSON_Parse(json_string);
    if (root && cJSON_IsObject(root)) {
        cJSON *raw_data_item = cJSON_GetObjectItem(root, "raw_data");
        if (cJSON_IsRaw(raw_data_item)) {
            // 进行针对原始类型数据的特殊处理
            //...
        }
        cJSON_Delete(root);
    }
    return 0;
}
​

4.5

4.5.1 cJSON_CreateNull

复制代码
#include "cJSON.h"
int main() {
    cJSON *nullItem = cJSON_CreateNull();
    // 这里可以将nullItem添加到一个更大的JSON结构中,例如一个对象或者数组
    cJSON_Delete(nullItem);
    return 0;
}
​

4.5.2 cJSON_CreateTrue

复制代码
#include "cJSON.h"
int main() {
    cJSON *trueItem = cJSON_CreateTrue();
    // 可以将trueItem添加到一个JSON对象或者数组中
    cJSON_Delete(trueItem);
    return 0;
}
​

4.5.3 cJSON_CreateFalse

复制代码
#include "cJSON.h"
int main() {
    cJSON *falseItem = cJSON_CreateFalse();
    // 将falseItem整合到一个JSON结构中
    cJSON_Delete(falseItem);
    return 0;
}
​

4.5.4 cJSON_CreateBool

复制代码
#include "cJSON.h"
int main() {
    cJSON_bool myBool = false;
    cJSON *boolItem = cJSON_CreateBool(myBool);
    // 对boolItem进行后续处理,如添加到其他JSON结构
    cJSON_Delete(boolItem);
    return 0;
}
​

4.5.5 cJSON_CreateNumber

复制代码
#include "cJSON.h"
int main() {
    double num = 3.14;
    cJSON *numberItem = cJSON_CreateNumber(num);
    // 将numberItem添加到一个JSON对象或者数组中
    cJSON_Delete(numberItem);
    return 0;
}
​

4.5.6 cJSON_CreateString

复制代码
#include "cJSON.h"
int main() {
    const char *str = "Hello, World!";
    cJSON *stringItem = cJSON_CreateString(str);
    // 把stringItem添加到一个JSON结构中
    cJSON_Delete(stringItem);
    return 0;
}
​

4.5.7 cJSON_CreateRaw

复制代码
#include "cJSON.h"
int main() {
    const char *rawJson = "{\"subObject\":\"value\"}";
    cJSON *rawItem = cJSON_CreateRaw(rawJson);
    // 将rawItem添加到一个JSON对象或者数组中
    cJSON_Delete(rawItem);
    return 0;
}
​

4.5.8 cJSON_CreateArray

复制代码
#include "cJSON.h"
int main() {
    cJSON *arrayItem = cJSON_CreateArray();
    // 可以向arrayItem中添加其他的cJSON项,如数字、字符串等
    cJSON_Delete(arrayItem);
    return 0;
}
​

4.5.9 cJSON_CreateObject

复制代码
#include "cJSON.h"
int main() {
    cJSON *objectItem = cJSON_CreateObject();
    // 可以向objectItem中添加键值对,如添加一个姓名属性
    cJSON_AddItemToObject(objectItem, "name", cJSON_CreateString("John"));
    cJSON_Delete(objectItem);
    return 0;
}
​

4.6

4.6.1 cJSON_CreateStringReference

复制代码
#include "cJSON.h"
int main() {
    const char *myString = "This is a test string";
    cJSON *stringRefItem = cJSON_CreateStringReference(myString);
    // 使用stringRefItem构建更大的JSON结构或者进行其他操作
    cJSON_Delete(stringRefItem);
    return 0;
}
​

4.6.2 cJSON_CreateObjectReference

复制代码
#include "cJSON.h"
int main() {
    cJSON *childObject = cJSON_CreateObject();
    cJSON_AddItemToObject(childObject, "name", cJSON_CreateString("Child"));
    cJSON *objectRef = cJSON_CreateObjectReference(childObject);
    // 使用objectRef构建更大的JSON结构或者进行其他操作
    cJSON_Delete(objectRef);
    cJSON_Delete(childObject);
    return 0;
}
​

4.6.3 cJSON_CreateArrayReference

复制代码
#include "cJSON.h"
int main() {
    cJSON *childItem = cJSON_CreateNumber(5);
    cJSON *arrayRef = cJSON_CreateArrayReference(childItem);
    // 使用arrayRef构建更大的JSON结构或者进行其他操作
    cJSON_Delete(arrayRef);
    cJSON_Delete(childItem);
    return 0;
}
​

4.6.4 cJSON_CreateIntArray

复制代码
#include "cJSON.h"
int main() {
    int numbers[] = {1, 2, 3};
    int count = sizeof(numbers)/sizeof(numbers[0]);
    cJSON *intArray = cJSON_CreateIntArray(numbers, count);
    // 将intArray添加到一个更大的JSON结构中或者进行其他操作
    cJSON_Delete(intArray);
    return 0;
}
​

4.6.5 cJSON_CreateFloatArray

复制代码
#include "cJSON.h"
int main() {
    float numbers[] = {1.1f, 2.2f, 3.3f};
    int count = sizeof(numbers)/sizeof(numbers[0]);
    cJSON *floatArray = cJSON_CreateFloatArray(numbers, count);
    // 对floatArray进行后续操作,如添加到其他JSON结构
    cJSON_Delete(floatArray);
    return 0;
}
​

4.6.6 cJSON_CreateDoubleArray

复制代码
#include "cJSON.h"
int main() {
    double numbers[] = {1.1, 2.2, 3.3};
    int count = sizeof(numbers)/sizeof(numbers[0]);
    cJSON *doubleArray = cJSON_CreateDoubleArray(numbers, count);
    // 处理doubleArray,如将其整合到一个JSON对象中
    cJSON_Delete(doubleArray);
    return 0;
}
​

4.6.7 cJSON_CreateStringArray

复制代码
#include "cJSON.h"
int main() {
    const char *strings[] = {"apple", "banana", "cherry"};
    int count = sizeof(strings)/sizeof(strings[0]);
    cJSON *stringArray = cJSON_CreateStringArray(strings, count);
    // 对stringArray进行操作,如添加到一个JSON对象中
    cJSON_Delete(stringArray);
    return 0;
}
​

4.7

4.7.1 cJSON_AddItemToArray

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *array = cJSON_CreateArray();
    cJSON *item = cJSON_CreateNumber(42);
    if (cJSON_AddItemToArray(array, item)) {
        char *jsonString = cJSON_Print(array);
        printf("%s\n", jsonString);
        free(jsonString);
    }
    cJSON_Delete(array);
    return 0;
}
​

4.7.2 cJSON_AddItemToObject

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *object = cJSON_CreateObject();
    cJSON *nameItem = cJSON_CreateString("John");
    if (cJSON_AddItemToObject(object, "name", nameItem)) {
        char *jsonString = cJSON_Print(object);
        printf("%s\n", jsonString);
        free(jsonString);
    }
    cJSON_Delete(object);
    return 0;
}
​

4.7.3 cJSON_AddItemToObjectCS

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *object = cJSON_CreateObject();
    cJSON *valueItem = cJSON_CreateNumber(100);
    const char *key = "constant_key";
    if (cJSON_AddItemToObjectCS(object, key, valueItem)) {
        char *jsonString = cJSON_Print(object);
        printf("%s\n", jsonString);
        free(jsonString);
    }
    cJSON_Delete(object);
    return 0;
}
​

4.7.4 cJSON_AddItemReferenceToArray

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *array = cJSON_CreateArray();
    cJSON *sharedItem = cJSON_CreateString("Shared data");
    if (cJSON_AddItemReferenceToArray(array, sharedItem)) {
        char *jsonString = cJSON_Print(array);
        printf("%s\n", jsonString);
        free(jsonString);
    }
    cJSON_Delete(array);
    return 0;
}
​

4.7.5 cJSON_AddItemReferenceToObject

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *object = cJSON_CreateObject();
    cJSON *sharedObject = cJSON_CreateObject();
    cJSON_AddItemToObject(sharedObject, "city", cJSON_CreateString("New York"));
    const char *key = "address";
    if (cJSON_AddItemReferenceToObject(object, key, sharedObject)) {
        char *jsonString = cJSON_Print(object);
        printf("%s\n", jsonString);
        free(jsonString);
    }
    cJSON_Delete(object);
    return 0;
}
​

4.8

4.8.1 cJSON_DetachItemViaPointer

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *array = cJSON_CreateArray();
    cJSON *item = cJSON_CreateNumber(42);
    cJSON_AddItemToArray(array, item);
    cJSON *detachedItem = cJSON_DetachItemViaPointer(array, item);
    if (detachedItem) {
        // 可以对detachedItem进行操作,例如修改它的值
        cJSON *newArray = cJSON_CreateArray();
        cJSON_AddItemToArray(newArray, detachedItem);
        char *jsonString = cJSON_Print(newArray);
        printf("%s\n", jsonString);
        free(jsonString);
        cJSON_Delete(newArray);
    }
    cJSON_Delete(array);
    return 0;
}
​

4.8.2 cJSON_DetachItemFromArray

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *array = cJSON_CreateArray();
    cJSON *item1 = cJSON_CreateNumber(10);
    cJSON *item2 = cJSON_CreateNumber(20);
    cJSON_AddItemToArray(array, item1);
    cJSON_AddItemToArray(array, item2);
    cJSON *detachedItem = cJSON_DetachItemFromArray(array, 0);
    if (detachedItem) {
        char *jsonString = cJSON_Print(detachedItem);
        printf("%s\n", jsonString);
        free(jsonString);
        // 可以重新将detachedItem插入到其他地方或者修改后再插回原数组
    }
    cJSON_Delete(array);
    return 0;
}
​

4.8.3 cJSON_DeleteItemFromArray

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *array = cJSON_CreateArray();
    cJSON *item1 = cJSON_CreateNumber(10);
    cJSON *item2 = cJSON_CreateNumber(20);
    cJSON_AddItemToArray(array, item1);
    cJSON_AddItemToArray(array, item2);
    cJSON_DeleteItemFromArray(array, 0);
    char *jsonString = cJSON_Print(array);
    printf("%s\n", jsonString);
    free(jsonString);
    cJSON_Delete(array);
    return 0;
}
​

4.8.4 cJSON_DetachItemFromObject

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *object = cJSON_CreateObject();
    cJSON *value = cJSON_CreateString("red");
    cJSON_AddItemToObject(object, "color_preference", value);
    cJSON *detachedValue = cJSON_DetachItemFromObject(object, "color_preference");
    if (detachedValue) {
        char *jsonString = cJSON_Print(detachedValue);
        printf("%s\n", jsonString);
        free(jsonString);
        // 可以对detachedValue进行操作,如修改后再插回原对象
    }
    cJSON_Delete(object);
    return 0;
}
​

4.8.5 cJSON_DetachItemFromObjectCaseSensitive

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *object = cJSON_CreateObject();
    cJSON *value = cJSON_CreateString("red");
    cJSON_AddItemToObject(object, "Color_Preference", value);
    cJSON *detachedValue = cJSON_DetachItemFromObjectCaseSensitive(object, "Color_Preference");
    if (detachedValue) {
        char *jsonString = cJSON_Print(detachedValue);
        printf("%s\n", jsonString);
        free(jsonString);
        // 可以对detachedValue进行操作,如修改后再插回原对象
    }
    cJSON_Delete(object);
    return 0;
}
​

4.8.6 cJSON_DeleteItemFromObject

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *object = cJSON_CreateObject();
    cJSON *value = cJSON_CreateString("abc123");
    cJSON_AddItemToObject(object, "temporary_token", value);
    cJSON_DeleteItemFromObject(object, "temporary_token");
    char *jsonString = cJSON_Print(object);
    printf("%s\n", jsonString);
    free(jsonString);
    cJSON_Delete(object);
    return 0;
}
​

4.8.7 cJSON_DeleteItemFromObjectCaseSensitive

复制代码
#include "cJSON.h"
​
int main() {
    cJSON *object = cJSON_CreateObject();
    cJSON *value = cJSON_CreateString("abc123");
    cJSON_AddItemToObject(object, "Temporary_Token", value);
    cJSON_DeleteItemFromObjectCaseSensitive(object, "Temporary_Token");
    char *jsonString = cJSON_Print(object);
    printf("%s\n", jsonString);
    free(jsonString);
    cJSON_Delete(object);
    return 0;
}
​

4.9

4.9.1 cJSON_InsertItemInArray

复制代码
#include <stdio.h>
#include <cJSON/cJSON.h>
​
int main() {
    // 创建一个空的cJSON数组
    cJSON *array = cJSON_CreateArray();
    if (!array) {
        perror("Failed to create array");
        return 1;
    }
    // 创建一个新的cJSON项
    cJSON *newItem = cJSON_CreateString("new element");
    if (!newItem) {
        perror("Failed to create new item");
        cJSON_Delete(array);
        return 1;
    }
    // 在数组的开头(位置0)插入新项
    if (!cJSON_InsertItemInArray(array, 0, newItem)) {
        perror("Failed to insert item in array");
        cJSON_Delete(array);
        cJSON_Delete(newItem);
        return 1;
    }
    char *jsonString = cJSON_Print(array);
    printf("The array after insertion: %s\n", jsonString);
    cJSON_Delete(array);
    cJSON_free(jsonString);
    return 0;
}
​

4.9.2 cJSON_ReplaceItemViaPointer

复制代码
#include <stdio.h>
#include <cJSON/cJSON.h>
​
int main() {
    // 创建一个父对象
    cJSON *parent = cJSON_CreateObject();
    if (!parent) {
        perror("Failed to create parent object");
        return 1;
    }
    // 在父对象中创建一个子项
    cJSON *originalItem = cJSON_CreateString("original value");
    cJSON_AddItemToObject(parent, "key", originalItem);
    // 创建一个新的替换项
    cJSON *replacementItem = cJSON_CreateString("replacement value");
    // 通过指针替换子项
    if (!cJSON_ReplaceItemViaPointer(parent, originalItem, replacementItem)) {
        perror("Failed to replace item via pointer");
        cJSON_Delete(parent);
        cJSON_Delete(originalItem);
        cJSON_Delete(replacementItem);
        return 1;
    }
    char *jsonString = cJSON_Print(parent);
    printf("The object after replacement: %s\n", jsonString);
    cJSON_Delete(parent);
    cJSON_free(jsonString);
    return 0;
}
​

4.9.3 cJSON_ReplaceItemInArray

复制代码
#include <stdio.h>
#include <cJSON/cJSON.h>
​
int main() {
    // 创建一个cJSON数组并添加一些元素
    cJSON *array = cJSON_CreateArray();
    cJSON *item1 = cJSON_CreateString("element1");
    cJSON *item2 = cJSON_CreateString("element2");
    cJSON_AddItemToArray(array, item1);
    cJSON_AddItemToArray(array, item2);
    // 创建一个新的替换项
    cJSON *newItem = cJSON_CreateString("new element2");
    // 替换数组中的第二个元素(位置1)
    if (!cJSON_ReplaceItemInArray(array, 1, newItem)) {
        perror("Failed to replace item in array");
        cJSON_Delete(array);
        cJSON_Delete(item1);
        cJSON_Delete(item2);
        cJSON_Delete(newItem);
        return 1;
    }
    char *jsonString = cJSON_Print(array);
    printf("The array after replacement: %s\n", jsonString);
    cJSON_Delete(array);
    cJSON_free(jsonString);
    return 0;
}
​

4.9.4 cJSON_ReplaceItemInObject

复制代码
#include <stdio.h>
#include <cJSON/cJSON.h>
​
int main() {
    // 创建一个cJSON对象
    cJSON *object = cJSON_CreateObject();
    if (!object) {
        perror("Failed to create object");
        return 1;
    }
    // 在对象中添加一个键值对
    cJSON *originalItem = cJSON_CreateString("original value");
    cJSON_AddItemToObject(object, "key", originalItem);
    // 创建一个新的替换项
    cJSON *newItem = cJSON_CreateString("replacement value");
    // 替换对象中键为"key"的项
    if (!cJSON_ReplaceItemInObject(object, "key", newItem)) {
        perror("Failed to replace item in object");
        cJSON_Delete(object);
        cJSON_Delete(originalItem);
        cJSON_Delete(newItem);
        return 1;
    }
    char *jsonString = cJSON_Print(object);
    printf("The object after replacement: %s\n", jsonString);
    cJSON_Delete(object);
    cJSON_free(jsonString);
    return 0;
}
​

4.9.5 cJSON_ReplaceItemInObjectCaseSensitive

复制代码
#include <stdio.h>
#include <cJSON/cJSON.h>
​
int main() {
    // 创建一个cJSON对象
    cJSON *object = cJSON_CreateObject();
    if (!object) {
        perror("Failed to create object");
        return 1;
    }
    // 在对象中添加一个键值对,键为"Key"(大写K)
    cJSON *originalItem = cJSON_CreateString("original value");
    cJSON_AddItemToObject(object, "Key", originalItem);
    // 创建一个新的替换项
    cJSON *newItem = cJSON_CreateString("replacement value");
    // 尝试替换对象中键为"key"(小写k)的项,由于区分大小写,替换会失败
    if (!cJSON_ReplaceItemInObjectCaseSensitive(object, "key", newItem)) {
        printf("Replacement failed as keys are case - sensitive\n");
    }
    char *jsonString = cJSON_Print(object);
    printf("The object: %s\n", jsonString);
    cJSON_Delete(object);
    cJSON_free(jsonString);
    return 0;
}
​

4.10

4.10.1 cJSON_Duplicate

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    // 创建一个简单的cJSON对象
    cJSON *root = cJSON_CreateObject();
    cJSON_AddNumberToObject(root, "number", 10);
    cJSON *duplicated = cJSON_Duplicate(root, 1);
    if (duplicated) {
        char *duplicated_str = cJSON_Print(duplicated);
        printf("Duplicated JSON: %s\n", duplicated_str);
        cJSON_Delete(duplicated);
        free(duplicated_str);
    }
    cJSON_Delete(root);
    return 0;
}
​

4.10.2 cJSON_Compare

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *obj1 = cJSON_CreateObject();
    cJSON_AddStringToObject(obj1, "name", "John");
    cJSON_AddNumberToObject(obj1, "age", 30);
​
    cJSON *obj2 = cJSON_CreateObject();
    cJSON_AddStringToObject(obj2, "name", "John");
    cJSON_AddNumberToObject(obj2, "age", 30);
​
    cJSON_bool equal = cJSON_Compare(obj1, obj2, 1);
    if (equal) {
        printf("The two cJSON objects are equal.\n");
    } else {
        printf("The two cJSON objects are not equal.\n");
    }
​
    cJSON_Delete(obj1);
    cJSON_Delete(obj2);
    return 0;
}
​

4.10.3 cJSON_Minify

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    char json_str[] = "{\n\t\"name\": \"John\",\n\t\"age\": 30\n}";
    cJSON_Minify(json_str);
    printf("Minified JSON: %s\n", json_str);
    return 0;
}
​

4.11

4.11.1 cJSON_AddNullToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON *null_item = cJSON_AddNullToObject(root, "nullable_field");
    if (null_item) {
        char *json_str = cJSON_Print(root);
        printf("JSON with null value: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.2 cJSON_AddTrueToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON *true_item = cJSON_AddTrueToObject(root, "is_logged_in");
    if (true_item) {
        char *json_str = cJSON_Print(root);
        printf("JSON with true value: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.3 cJSON_AddFalseToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON *false_item = cJSON_AddFalseToObject(root, "is_feature_enabled");
    if (false_item) {
        char *json_str = cJSON_Print(root);
        printf("JSON with false value: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.4 cJSON_AddBoolToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON_bool user_permission = 1;
    cJSON *bool_item = cJSON_AddBoolToObject(root, "can_edit", user_permission);
    if (bool_item) {
        char *json_str = cJSON_Print(root);
        printf("JSON with boolean value: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.5 cJSON_AddNumberToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    double price = 19.99;
    cJSON *number_item = cJSON_AddNumberToObject(root, "price", price);
    if (number_item) {
        char *json_str = cJSON_Print(root);
        printf("JSON with number value: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.6 cJSON_AddStringToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    char *name = "John";
    cJSON *string_item = cJSON_AddStringToObject(root, "name", name);
    if (string_item) {
        char *json_str = cJSON_Print(root);
        printf("JSON with string value: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.7 cJSON_AddRawToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    char *raw = "{\"custom\":\"data\"}";
    cJSON *raw_item = cJSON_AddRawToObject(root, "custom_data", raw);
    if (raw_item) {
        char *json_str = cJSON_Print(root);
        printf("JSON with raw value: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.8 cJSON_AddObjectToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON *sub_object = cJSON_AddObjectToObject(root, "department");
    if (sub_object) {
        cJSON_AddStringToObject(sub_object, "name", "Sales");
        char *json_str = cJSON_Print(root);
        printf("JSON with sub - object: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.11.9 cJSON_AddArrayToObject

复制代码
#include <stdio.h>
#include <cJSON.h>
​
int main() {
    cJSON *root = cJSON_CreateObject();
    cJSON *array = cJSON_AddArrayToObject(root, "phone_numbers");
    if (array) {
        cJSON_AddStringToObject(array, "", "123 - 456 - 7890");
        char *json_str = cJSON_Print(root);
        printf("JSON with array: %s\n", json_str);
        cJSON_Delete(root);
        free(json_str);
    }
    return 0;
}
​

4.12

4.12.1 cJSON_SetIntValue

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    cJSON *user_info = cJSON_CreateObject();
    int age = 25;
    cJSON_SetIntValue(user_info, age);
    // 可以通过以下方式验证设置是否成功
    if (user_info!= NULL) {
        printf("Valueint: %d, Valuedouble: %lf\n", user_info->valueint, user_info->valuedouble);
    }
    cJSON_Delete(user_info);
    return 0;
}
​

4.12.2 cJSON_SetNumberValue

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    cJSON *trade_info = cJSON_CreateObject();
    double price = 12.5;
    cJSON_SetNumberValue(trade_info, price);
    if (trade_info!= NULL) {
        // 假设可以通过某种方式获取设置后的数值进行验证
        double retrieved_price;
        // 这里只是示例,实际获取方式可能不同
        retrieved_price = trade_info->valuedouble;
        printf("Set price: %lf, Retrieved price: %lf\n", price, retrieved_price);
    }
    cJSON_Delete(trade_info);
    return 0;
}
​

4.12.3 cJSON_SetValuestring

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    cJSON *user_info = cJSON_CreateString("John");
    cJSON_SetValuestring(user_info, "Mike");
    if (user_info!= NULL) {
        printf("New valuestring: %s\n", user_info->valuestring);
    }
    cJSON_Delete(user_info);
    return 0;
}
​

4.12.4 cJSON_SetBoolValue

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    cJSON *feature_status = cJSON_CreateTrue();
    cJSON_SetBoolValue(feature_status, false);
    if (feature_status!= NULL) {
        if (feature_status->type == cJSON_False) {
            printf("Feature is now disabled.\n");
        } else {
            printf("Feature is enabled.\n");
        }
    }
    cJSON_Delete(feature_status);
    return 0;
}
​

4.12.5 cJSON_ArrayForEach

复制代码
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    cJSON *array = cJSON_CreateArray();
    cJSON_AddItemToArray(array, cJSON_CreateNumber(1));
    cJSON_AddItemToArray(array, cJSON_CreateNumber(2));
    cJSON_AddItemToArray(array, cJSON_CreateNumber(3));
    cJSON *element;
    cJSON_ArrayForEach(element, array) {
        if (element!= NULL) {
            printf("%lf ", element->valuedouble);
        }
    }
    printf("\n");
    cJSON_Delete(array);
    return 0;
}
​

4.13

4.13.1 cJSON_malloc、cJSON_free

复制代码
​
#include <stdio.h>
#include "cJSON.h"
​
int main() {
    // 使用cJSON_malloc分配内存
    cJSON *new_obj = (cJSON *)cJSON_malloc(sizeof(cJSON));
    if (new_obj!= NULL) {
        // 进行一些初始化操作,这里省略
        // 使用完毕后释放内存
        cJSON_free(new_obj);
    }
    return 0;
}
​
相关推荐
唐诺3 小时前
几种广泛使用的 C++ 编译器
c++·编译器
冷眼看人间恩怨4 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
红龙创客4 小时前
某狐畅游24校招-C++开发岗笔试(单选题)
开发语言·c++
Lenyiin4 小时前
第146场双周赛:统计符合条件长度为3的子数组数目、统计异或值为给定值的路径数目、判断网格图能否被切割成块、唯一中间众数子序列 Ⅰ
c++·算法·leetcode·周赛·lenyiin
yuanbenshidiaos6 小时前
c++---------数据类型
java·jvm·c++
十年一梦实验室6 小时前
【C++】sophus : sim_details.hpp 实现了矩阵函数 W、其导数,以及其逆 (十七)
开发语言·c++·线性代数·矩阵
taoyong0016 小时前
代码随想录算法训练营第十一天-239.滑动窗口最大值
c++·算法
这是我586 小时前
C++打小怪游戏
c++·其他·游戏·visual studio·小怪·大型·怪物
fpcc6 小时前
跟我学c++中级篇——C++中的缓存利用
c++·缓存
呆萌很7 小时前
C++ 集合 list 使用
c++