cJSON 拷贝代码
时间: 2024-06-22 07:00:40 浏览: 10
cJSON是一个轻量级的JSON解析库,其设计目标是提供一个易于使用的API,并支持C、C++和Objective-C语言。在处理JSON数据时,可能需要创建cJSON对象的副本,以防原始数据被意外修改。以下是一个简单的cJSON拷贝代码示例:
```c
#include "cJSON.h"
// 原始JSON字符串
const char* original_json = "{\"name\":\"John\", \"age\":30, \"city\":\"New York\"}";
// 解析原始JSON到cJSON结构体
cJSON* original = cJSON_Parse(original_json);
// 创建一个新的cJSON对象来存储副本
cJSON* copied = cJSON_Duplicate(original);
// 处理copied对象,它不会影响original
// ...
// 释放资源
cJSON_Delete(original);
cJSON_Delete(copied);
```
在这个例子中,`cJSON_Parse`函数用于解析JSON字符串,`cJSON_Duplicate`函数用于创建对象的副本。最后别忘了使用`cJSON_Delete`来释放这两个内存分配的cJSON对象。
相关问题
c语言 cjson代码
CJSON是一个用C语言写的JSON解析库,可以方便地在C语言程序中操作JSON数据。使用CJSON库可以方便地读取、解析和生成JSON格式的数据。下面是一个使用CJSON库的简单示例:
```
#include <stdio.h>
#include "cjson/cJSON.h"
int main() {
// 创建一个JSON对象
cJSON *root = cJSON_CreateObject();
// 向JSON对象中添加数据
cJSON_AddStringToObject(root, "name", "张三");
cJSON_AddNumberToObject(root, "age", 20);
// 将JSON对象转换为字符串
char *jsonStr = cJSON_Print(root);
// 输出JSON字符串
printf("JSON字符串:%s\n", jsonStr);
// 从JSON字符串中解析数据
cJSON *parsed = cJSON_Parse(jsonStr);
const char *name = cJSON_GetObjectItem(parsed, "name")->valuestring;
int age = cJSON_GetObjectItem(parsed, "age")->valueint;
// 输出解析后的数据
printf("解析后的name:%s\n", name);
printf("解析后的age:%d\n", age);
// 释放内存
cJSON_Delete(root);
cJSON_Delete(parsed);
free(jsonStr);
return 0;
}
```
上面的代码演示了如何使用CJSON库创建JSON对象、将JSON对象转换为字符串、从JSON字符串中解析数据等操作。通过CJSON库,可以在C语言程序中方便地操作JSON数据,实现JSON格式的数据读取、解析和生成。
cJSON遍历实例代码
cJSON遍历实例代码如下:
```c
#include <stdio.h>
#include "cJSON.h"
void traverse(cJSON *root) {
if (root == NULL) {
return;
}
switch (root->type) {
case cJSON_False:
printf("False\n");
break;
case cJSON_True:
printf("True\n");
break;
case cJSON_NULL:
printf("NULL\n");
break;
case cJSON_Number:
printf("Number: %lf\n", root->valuedouble);
break;
case cJSON_String:
printf("String: %s\n", root->valuestring);
break;
case cJSON_Array:
printf("Array:\n");
cJSON *child = root->child;
while (child != NULL) {
traverse(child);
child = child->next;
}
break;
case cJSON_Object:
printf("Object:\n");
cJSON *item = root->child;
while (item != NULL) {
printf("Key: %s\n", item->string);
traverse(item);
item = item->next;
}
break;
default:
break;
}
}
int main() {
const char *jsonStr = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}";
cJSON *root = cJSON_Parse(jsonStr);
traverse(root);
cJSON_Delete(root);
return 0;
}
```
上述代码通过cJSON库解析了一个JSON字符串,并实现了遍历JSON对象的功能。遍历函数traverse()通过递归地遍历cJSON对象的子节点,根据节点的类型打印出相应的信息。在主函数中,我们首先将JSON字符串解析为cJSON对象,然后调用traverse()函数进行遍历,最后释放资源。
希望以上代码能对您有所帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [ESP32-C3入门教程 系统篇④——cJSON应用实例 | C语言中超轻量级JSON解析器](https://blog.csdn.net/kangweijian/article/details/124579543)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [cJSON方法详解](https://blog.csdn.net/jhyBOSS/article/details/108375390)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)