用C语言写一个cjson解析{"action":2,"arg":{"speed":0.5,"position":1500}}的程序
时间: 2023-08-21 21:04:47 浏览: 157
你可以使用cJSON库来解析JSON数据。首先,你需要在你的项目中包含cJSON的头文件cJSON.h和源文件cJSON.c。然后,你可以按照以下步骤来解析给定的JSON数据:
1. 定义一个cJSON对象指针,用于保存解析后的JSON数据。
2. 使用cJSON_Parse函数将JSON字符串解析为cJSON对象。这个函数会返回一个指向cJSON对象的指针。
3. 使用cJSON_GetObjectItem函数获取JSON对象中的各个字段的值。你可以使用cJSON_GetObjectItemCaseSensitive函数来区分大小写,或者使用cJSON_GetObjectItem函数来忽略大小写。
4. 根据需要,将获取到的字段值转换为相应的数据类型,比如整数、浮点数或字符串。
下面是一个示例程序:
```c
#include <stdio.h>
#include "cJSON.h"
int main() {
const char* json_data = "{\"action\":2,\"arg\":{\"speed\":0.5,\"position\":1500}}";
// 解析JSON数据
cJSON *root = cJSON_Parse(json_data);
if (root == NULL) {
printf("JSON解析失败\n");
return 1;
}
// 获取action字段的值
cJSON *action_item = cJSON_GetObjectItemCaseSensitive(root, "action");
if (!cJSON_IsNumber(action_item)) {
printf("action字段不存在或不是数字类型\n");
cJSON_Delete(root);
return 1;
}
int action = action_item->valueint;
// 获取arg字段的值
cJSON *arg_item = cJSON_GetObjectItemCaseSensitive(root, "arg");
if (!cJSON_IsObject(arg_item)) {
printf("arg字段不存在或不是对象类型\n");
cJSON_Delete(root);
return 1;
}
// 获取speed字段的值
cJSON *speed_item = cJSON_GetObjectItemCaseSensitive(arg_item, "speed");
if (!cJSON_IsNumber(speed_item)) {
printf("speed字段不存在或不是数字类型\n");
cJSON_Delete(root);
return 1;
}
double speed = speed_item->valuedouble;
// 获取position字段的值
cJSON *position_item = cJSON_GetObjectItemCaseSensitive(arg_item, "position");
if (!cJSON_IsNumber(position_item)) {
printf("position字段不存在或不是数字类型\n");
cJSON_Delete(root);
return 1;
}
int position = position_item->valueint;
// 打印解析结果
printf("action: %d\n", action);
printf("speed: %f\n", speed);
printf("position: %d\n", position);
// 释放内存
cJSON_Delete(root);
return 0;
}
```
以上程序会解析给定的JSON数据,并将解析结果打印出来。在这个例子中,action字段是一个整数,arg字段是一个对象,其中包含speed字段和position字段,它们分别是一个浮点数和一个整数。
希望这个例子能对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [项目二十三:智能大棚温控系统](https://blog.csdn.net/weixin_51332399/article/details/130694490)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文