前言
我们在写应用程序的时候,经常需要把一些数据存储到文件,方便程序启动时使用,或导出给其他应用程序使用。常用的用于配置保存和数据交换的文件格式有:ini、json和xml。我最初使用ini做为应用程序的启动配置文件,当应用程序启动时,根据ini文件里的配置项加载资源来启动程序。使用xml文件来存储结构比较复杂的配置或交换数据。而json这种结构简单的文件格式,经常看见测试部的小姐姐们用来写测试用例。这篇文章的主要目的是记录我是怎么使用C语言来生成json的,因为最近在写一个练习题:使用C语言实现aidl转json。练习题没有完全做好,所以先写如何使用C语言生成json文件。一、json是什么
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。-- 来自百度百科二、C语言生成json开发步骤
1.下载cJSON库文件
cJSON库文件一共两个文件:cJSON.h和cJSON.c。这两个文件可以从李老师的AWTK开源项目中可以找到:https://github.com/zlgopen/awtk/blob/master/3rd/cjson。2.使用cJSON接口生成json
例1、创建简单的对象,包含名字和年龄:如:名字是字符串;年龄是数字。
{
"name": "zhang san",
"age": 9
}
源码如下:
cJSON* root = NULL;
char* out = NULL;
root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", "zhang san");//添加字符串键值对
cJSON_AddNumberToObject(root , "age", 9);//添加数字键值对
out = cJSON_Print(root);//转成带格式的字符串,含空格和换行等格式
printf("%s\n", out);
输出结果:
例2、创建带简单数组的对象,如:
数组包含简单的字符串。
{
“name”: “zhang san”,
“age”: 9,
“curriculum”: [“Chinese”, “English”]
}
cJSON* root = NULL;
char* out = NULL;
root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", "zhang san");
cJSON_AddNumberToObject(root , "age", 9);
cJSON* curriculum_arr = cJSON_CreateArray();
cJSON_AddItemToArray(curriculum_arr, cJSON_CreateString("Chinese"));
cJSON_AddItemToArray(curriculum_arr, cJSON_CreateString("English"));
cJSON_AddItemToObject(root, "curriculum", curriculum_arr);
out = cJSON_Print(root);
printf("%s\n", out);
输出结果:
例3、创建带复杂数组的对象,如:
数组内包含对象,对象包含一些子项。
{
“name”: “zhang san”,
“age”: 9,
“curriculum”: [{
“9:00-9:45”: “Chinese”,
“rest”: 15,
“10:00-10:45”: “English”
}, {
“14:00-14:45”: “PE”,
“rest”: 15,
“15:00-15:45”: “mathematics”
}]
}
cJSON* root = NULL;
char* out = NULL;
root = cJSON_CreateObject();
cJSON_AddStringToObject(root, "name", "zhang san");
cJSON_AddNumberToObject(root , "age", 9);
cJSON* curriculum_arr = cJSON_CreateArray();
cJSON* curriculum_time = cJSON_CreateObject();
cJSON_AddStringToObject(curriculum_time, "9:00-9:45", "Chinese");
cJSON_AddNumberToObject(curriculum_time, "rest", 15);
cJSON_AddStringToObject(curriculum_time, "10:00-10:45", "English");
cJSON_AddItemToArray(curriculum_arr, curriculum_time);
cJSON* curriculum_time_afternoon = cJSON_CreateObject();
cJSON_AddStringToObject(curriculum_time_afternoon, "14:00-14:45", "PE");
cJSON_AddNumberToObject(curriculum_time_afternoon, "rest", 15);
cJSON_AddStringToObject(curriculum_time_afternoon, "15:00-15:45", "mathematics");
cJSON_AddItemToArray(curriculum_arr, curriculum_time_afternoon);
cJSON_AddItemToObject(root, "curriculum", curriculum_arr);
out = cJSON_Print(root);
printf("%s\n", out);
输出结果:
总结
cJSON常用的几个函数总结如下:cJSON_CreateObject :生成节点对象,可以使用它创建根节点和子节点
cJSON_AddStringToObject:给指定节点添加值是字符串类型的子项
cJSON_AddNumberToObject:给指定节点添加值是数值类型的子项
cJSON_CreateArray:创建数组对象
cJSON_AddItemToArray:给数组添加子对象
cJSON_AddItemToObject:给父节点添加子对象
cJSON_CreateString:生成一个字符串类型对象
cJSON_CreateNumber:生成一个数值类型对象
cJSON_CreateBool:生成一个bool类型对象
cJSON_Delete:释放内存
cJSON库还有很多接口,如果在开发过程中需要使用,可以查看源码,这里仅列出一些最常用的接口,也是我编写练习题的时候使用到的接口,仅供参考。走一步,留下一个脚印,学习快乐~