测试程序的目的是更新已有的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,0,SEEK_END);
- len=ftell(f);
- fseek(f,0,SEEK_SET);
- data=(char*)malloc(len+1);
- fread(data,1,len,f);
- data[len]='\0';
- json=cJSON_Parse(data);
- if (!json)
- {
- printf("Error before: [%s]\n",cJSON_GetErrorPtr());
- ret = NULL;
- goto EXIT;
- }
- else
- {
- //printf("%s\n",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 failed\n");
- 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:%s\n",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:%s\n",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;
所以如果想要修改valueint的值必须同时调用
- cJSON_GetObjectItem(basicpara,"mode")->valueint = 0;
- cJSON_GetObjectItem(basicpara,"mode")->valuedouble = 0;
测试程序的目的是更新已有的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,0,SEEK_END);
- len=ftell(f);
- fseek(f,0,SEEK_SET);
- data=(char*)malloc(len+1);
- fread(data,1,len,f);
- data[len]='\0';
- json=cJSON_Parse(data);
- if (!json)
- {
- printf("Error before: [%s]\n",cJSON_GetErrorPtr());
- ret = NULL;
- goto EXIT;
- }
- else
- {
- //printf("%s\n",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 failed\n");
- 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:%s\n",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:%s\n",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;
所以如果想要修改valueint的值必须同时调用
- cJSON_GetObjectItem(basicpara,"mode")->valueint = 0;
- cJSON_GetObjectItem(basicpara,"mode")->valuedouble = 0;