您的位置:首页 > Web前端 > JavaScript

使用cJSON库更新json文件

2016-03-15 14:05 806 查看
测试程序的目的是更新已有的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;
也只是修改了valuedouble的值。

所以如果想要修改valueint的值必须同时调用

cJSON_GetObjectItem(basicpara,"mode")->valueint = 0;
cJSON_GetObjectItem(basicpara,"mode")->valuedouble = 0;



引用链接:https://sourceforge.net/p/cjson/discussion/998970/thread/5c13b93f/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: