网站首页 > 知识剖析 正文
cJson使用
有如下json数据,我们学习如何解析它:
{
"id":100,
"username":"maye",
"password":"123456",
"online":false
}
从文件读取json数据
首先我们从文件中获取json数据:
const char* jsonFromFile(const char* filename)
{
FILE* fp = fopen(filename, "r");
if (!fp)
{
return NULL;
}
fseek(fp, 0, SEEK_END);
long len = ftell(fp);
fseek(fp, 0, SEEK_SET);
char* buf = calloc(len+1, sizeof(char));
fread(buf, sizeof(char), len, fp);
fclose(fp);
return buf;
}
int main()
{
const char* jsondata = jsonFromFile("test.json");
printf("%s\n", jsondata);
cJSON* root = cJSON_Parse(jsondata);//解析json数据
//TODO 在这插入其他代码
free(jsondata);//释放内存
cJSON_free(root);
return 0;
}
获取cJSON文本
在解析或者生成json数据之后,如果需要从cJSON实体中获得文本,可以使用以下四种方式。
cJSON_Print
函数原型:char * cJSON_Print(const cJSON *item);
该函数将一个cJSON实体渲染为字符串(有格式),注意:返回的字符串需要手动释放内存
char* cjson = cJSON_Print(root);
printf("%s\n", cjson);
cJSON_free(cjson);//释放
效果:
cJSON_PrintUnformatted
函数原型:char * cJSON_PrintUnformatted(const cJSON *item);
该函数将一个cJSON实体渲染为字符串(无格式,所占内存更小,便于传输),注意:返回的字符串需要手动释放内存
cjson = cJSON_PrintUnformatted(root);
printf("%s\n", cjson);
cJSON_free(cjson); //释放
效果:
cJSON_PrintBuffered
函数原型:char * cJSON_PrintBuffered(const cJSON *item, int prebuffer, cJSON_bool fmt)
使用缓冲策略将一个cJSON实体呈现为文本。Prebuffer是对最终大小的猜测。“猜得好”减少了再分配,提升了效率。Fmt 指定是否格式化json数据。注意:返回的字符串需要手动释放内存
cjson = cJSON_PrintBuffered(root, strlen(jsondata) + 5, cJSON_True);
printf("%s\n", cjson);
cJSON_free(cjson); //释放
cJSON_PrintPreallocated
使用已经在内存中分配的具有给定长度的缓冲区将一个cJSON实体渲染为文本。成功时返回1,失败时返回0。 注意:返回值为是否渲染成功,使用缓冲区之前先进行判断
char buf[1024] = { 0 };//预先准备缓冲区
cJSON_bool ret = cJSON_PrintPreallocated(root, buf, sizeof(buf), cJSON_True);
if (ret)
{
printf("%s\n", buf);
}
//这里就不需要释放了
json数据写入文件
获得json文本之后,我们就可把它保存起来了,同样使用文件操纵,非常滴简单!
//把json数据写入文件,返回写入成功的字节数
int jsonSaveFile(const char* filename,const char* cjson)
{
FILE* fp = fopen(filename, "w");
if (!fp)
{
return NULL;
}
size_t len = fwrite(cjson, sizeof(char), strlen(cjson), fp);
fclose(fp);
return len;
}
int main()
{
const char* jsondata = jsonFromFile("test.json");
cJSON* root = cJSON_Parse(jsondata);//解析json数据
free(jsondata);//释放内存
//将一个cJSON实体渲染为字符串(无格式,所占内存更小,便于传输),注意:同上
cjson = cJSON_PrintUnformatted(root);
printf("%s\n", cjson);
jsonSaveFile("format.json", cjson);
cJSON_free(cjson);
cJSON_free(root);
return 0;
}
结果:
cJSON解析json数据和从文件读取,保存到文件的内容就到这啦~接下来会为大家带来更多cJSON库使用技巧,喜欢的不如点个“在看”吧
- 上一篇: JavaScript处理JSON的方法
- 下一篇: JAVA 0基础小白深入掌握Json
猜你喜欢
- 2024-11-18 深入了解:JSON.stringify的不可思议之处
- 2024-11-18 你不知道的JavaScript中的5个JSON秘密功能
- 2024-11-18 从业二十年的测试工程师今天给大家分享postman的使用技巧
- 2024-11-18 手把手教你JSON解析完Cube数据,如何输出到Excel
- 2024-11-18 「jQuery-5」 JavaScript对象和json
- 2024-11-18 亲手带你 Debug Fastjson 的安全漏洞
- 2024-11-18 JSON数据格式
- 2024-11-18 你不知道的JSON.stringify神操
- 2024-11-18 JSON如何解析
- 2024-11-18 38.JavaScript:try...catch异常处理
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)