C语言生成json


前言

        我们在写应用程序的时候,经常需要把一些数据存储到文件,方便程序启动时使用,或导出给其他应用程序使用。常用的用于配置保存和数据交换的文件格式有: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库还有很多接口,如果在开发过程中需要使用,可以查看源码,这里仅列出一些最常用的接口,也是我编写练习题的时候使用到的接口,仅供参考。走一步,留下一个脚印,学习快乐~
  • 0
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值