如何根据i 的值动态创建 CJSON对象 for(int i = 0; i < yj_mqtt.yj_log.file_name_num_RES; i++) { cJSON *fileName2;}
时间: 2024-03-21 22:38:32 浏览: 125
可以使用循环来动态创建多个CJSON对象,每次循环创建一个对象并添加到一个CJSON数组中。示例代码如下:
```
cJSON *fileNamesArray = cJSON_CreateArray(); // 创建一个CJSON数组
for(int i = 0; i < yj_mqtt.yj_log.file_name_num_RES; i++) {
cJSON *fileName = cJSON_CreateObject(); // 创建一个CJSON对象
// 给CJSON对象添加属性
cJSON_AddStringToObject(fileName, "name", yj_mqtt.yj_log.file_name_RES[i]);
cJSON_AddNumberToObject(fileName, "size", yj_mqtt.yj_log.file_size_RES[i]);
// 将CJSON对象添加到CJSON数组中
cJSON_AddItemToArray(fileNamesArray, fileName);
}
```
上述代码中,循环遍历yj_mqtt.yj_log.file_name_RES数组,每次创建一个CJSON对象,并给对象添加name和size两个属性,然后将对象添加到fileNamesArray数组中。最终得到的fileNamesArray数组包含了多个CJSON对象,可以用于生成JSON字符串或进行其他操作。
相关问题
link_s = list_entry(poss, struct m0_node_list, list); printf("---------------------"); printf("links :%s %d %d\n", link_s->node.name, link_s->node.key, link_s->node.type); printf("---------------------"); printf("---------------------"); if (strcmp(link_s->node.name, "temp") == 0) { stm->key = link_s->node.key; stm->new_val.f_val = cJSON_GetObjectItem(cjson_r, "temp")->valuedouble; //解析对象 stm->type = link_s->node.type; printf("temp %f %d %d\n", stm->new_val.f_val, stm->key, stm->type); } if (strcmp(link_s->node.name, "humi") == 0) { stm->key = link_s->node.key; stm->new_val.i_val = cJSON_GetObjectItem(cjson_r, "humi")->valueint; //解析对象 stm->type = link_s->node.type; printf("humi %d %d %d\n", stm->new_val.i_val, stm->key, stm->type); } if (strcmp(link_s->node.name, "bat") == 0) { stm->key = link_s->node.key; stm->new_val.i_val = cJSON_GetObjectItem(cjson_r, "bat")->valueint; //解析对象 stm->type = link_s->node.type; printf("bat %d %d %d\n", stm->new_val.i_val, stm->key, stm->type); } if (strcmp(link_s->node.name, "led") == 0) { printf("---------------------"); stm->key = link_s->node.key; stm->new_val.b_val = cJSON_GetObjectItem(cjson_r, "led")->valueint; //解析对象 stm->type = link_s->node.type; printf("led %d %d %d\n", stm->new_val.b_val, stm->key, stm->type); }
这段代码看起来像是从一个链表中取出节点,然后根据节点的名称解析 JSON 数据,并将解析结果存储到一个结构体变量 stm 中。具体来说,这段代码的流程可能是这样的:
1. 从 poss 中取出一个节点 link_s。
2. 判断 link_s 的名称,如果是 "temp",则从 cjson_r 中解析出 "temp" 字段的值,赋值给 stm 的 new_val.f_val 字段。
3. 如果是 "humi",则从 cjson_r 中解析出 "humi" 字段的值,赋值给 stm 的 new_val.i_val 字段。
4. 如果是 "bat",则从 cjson_r 中解析出 "bat" 字段的值,赋值给 stm 的 new_val.i_val 字段。
5. 如果是 "led",则从 cjson_r 中解析出 "led" 字段的值,赋值给 stm 的 new_val.b_val 字段。
最后,将 stm 的 key 字段和 type 字段赋值为 link_s 的对应值。
需要注意的是,这段代码无法单独看出来是什么意思,需要结合上下文和相关代码才能理解。
解析代码 int para_set_misc_opt(char *parse_name, void *jsonIn) { cJSON *pJsonIn = jsonIn; cJSON *c = NULL; int need_to_notify=0; int ret=0; cJSON_ArrayForEach(c,pJsonIn) { int type=peek_misc_enum_type(c->string); if(c->type != type) { continue; } if(cJSON_IsString(c)) { ret=para_set_misc_cur_str(c->string,c->valuestring); } else { ret=para_set_misc_cur_number(c->string,c->valueint); } if(1==ret) { need_to_notify=1; } } if(need_to_notify) { lib_info("need_to_notify"); if (para_profile.misc_page_caller) para_profile.misc_page_caller(para_set_misc_opt, "all", 0); } return 0;
这段代码是一个函数,函数名为 para_set_misc_opt,接受两个参数,一个是字符串类型的 parse_name,另一个是 void 类型的 jsonIn。函数中使用了 cJSON 库来解析 jsonIn 参数,遍历其中的每一个元素,判断其类型是否符合要求,然后根据类型调用不同的函数进行处理。如果有需要通知的情况,则会调用 para_profile.misc_page_caller 函数进行通知。最后返回值为 。
阅读全文