使用cJSON库更新json文件
发布时间:2020-12-16 18:59:37 所属栏目:百科 来源:网络整理
导读:测试程序的目的是更新已有的json文件。 下面是测试程序的代码 #include "smartlight.h"#include "cJSON.h"cJSON *dofile(char *filename){FILE *f;long len;char *data;cJSON *json,*ret;f=fopen(filename,"rb");fseek(f,SEEK_END);len=ftell(f);fseek(f,SEE
测试程序的目的是更新已有的json文件。 下面是测试程序的代码 #include "smartlight.h" #include "cJSON.h" cJSON *dofile(char *filename) { FILE *f; long len; char *data; cJSON *json,*ret; f=fopen(filename,"rb"); fseek(f,SEEK_END); len=ftell(f); fseek(f,SEEK_SET); data=(char*)malloc(len+1); fread(data,1,len,f); data[len]=' '; json=cJSON_Parse(data); if (!json) { printf("Error before: [%s]n",cJSON_GetErrorPtr()); ret = NULL; goto EXIT; } else { //printf("%sn",data); ret = json; } EXIT: free(data); fclose(f); return ret; } int write_file(char *filename,char *out) { FILE *fp = NULL; fp = fopen(filename,"a+"); if(fp == NULL) { fprintf(stderr,"open file failedn"); exit(-1); } fprintf(fp,"%s",out); if(fp != NULL) fclose(fp); } int main() { cJSON *root,*basicpara; char *out; root = dofile("basicparameter.cfg"); out = cJSON_Print(root); printf("before modify:%sn",out); free(out); basicpara = cJSON_GetObjectItem(root,"basicparameter"); cJSON_GetObjectItem(basicpara,"mode")->valueint = 0; //cJSON_GetObjectItem(basicpara,"mode")->valuedouble = 0; cJSON_GetObjectItem(basicpara,"TimeoutPoweron")->valueint = 10; //cJSON_GetObjectItem(basicpara,"TimeoutPoweron")->valuedouble = 10; out = cJSON_Print(root); printf("after modify:%sn",out); free(out); //write_file("basicparameter.cfg",out); cJSON_Delete(root); return 0; } 刚开始只修改了valueint的值,结果显示修改前后的结果一样。 cJSON_GetObjectItem(basicpara,"mode")->valueint = 0;
然后修改valuedouble的值,才能真能修改json文件。
如果只调用 cJSON_GetObjectItem(basicpara,"mode")->valuedouble = 0;也只是修改了valuedouble的值。 所以如果想要修改valueint的值必须同时调用 cJSON_GetObjectItem(basicpara,"mode")->valueint = 0; cJSON_GetObjectItem(basicpara,"mode")->valuedouble = 0;引用链接: https://sourceforge.net/p/cjson/discussion/998970/thread/5c13b93f/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |