我是靠谱客的博主 专注马里奥,最近开发中收集的这篇文章主要介绍使用cJSON库更新json文件,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

测试程序的目的是更新已有的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]='';
	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/ 

最后

以上就是专注马里奥为你收集整理的使用cJSON库更新json文件的全部内容,希望文章能够帮你解决使用cJSON库更新json文件所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部