简介

Jansson是一个用于解码、编码、操控JSON的C库。其特性为:

  1. 简单直观的API和数据模型
  2. 没有依赖项
  3. 完整的Unicode支持(UTF-8)
构建

Jansson使用cmake作为构建工具。可以执行下面的命令构建:

 
 
Shell
 
1
2
3
4
5
jansson
jansson
build
.
install

上述命令执行后,Jansson的头文件和静态库被安装到/home/alex/CPP/lib/jansson/2.9目录

使用

这里我们创建一个CMake工程:

CMakeLists.txt
 
 
1
2
3
4
5
6
7
)
)
)
)
)
)
)
解码JSON

下面的代码展示了如何把字符串解码为json_t结构:

 
 
 
C
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <jansson.h>
#include <assert.h>
 
{
;
;
// json_t用于引用任何JSON节点
;
// 如果读取失败,自动置为空指针
{
;
;
{
// json_is_*宏用于判断数据类型
// 处理JSON对象
;
;
;
;
;
;
// 处理JSON数组
;
;
{
;
;
}
// 减小引用计数,导致资源回收
;
}
;
}

运行上述代码后输出:

 
 
Shell
 
1
2
3
30
彩彩
当当
编码JSON

下面的代码展示了如何把json_t结构编码为字符串:

 
 
C
 
1
2
3
;
;
;

运行上述代码后输出:

 
 
Shell
 
1
2
3
4
5
6
7
8
{
,
[
,
,
}
打包JSON

下面的代码展示了如何把零散数据打包(pack)为json_t结构:

 
 
C
 
1
2
3
4
5
6
7
8
9
10
11
12
13
;
(
// jansson使用格式限定符来指定要创建的JSON的JSON节点的类型
// 下面的例子创建三元素的数组:字符串、字符串、布尔值
)
;
/* 打包一个空对象 */
;
/* 打包出 {age:30,childNum:2} */
;
;
;

可用的格式限定符如下表:

限定符 说明
s 将null结尾的UTF-8字符串转换为JSON字符串
s? 和上面类似,但是如果位置参数是NULL则插入JSON null值
s# 对应两个位置参数const char *, int,将指定长度的UTF-8缓冲转换为JSON字符串
s% 和上面类似,只是未知参数类型为const char *, size_t
+ 把此位置参数连接到前一个位置参数后面
+# 和上面类似,接收位置参数const char *, int
+% 和上面类似,接收位置参数const char *, size_t
n 输出null,不消耗位置参数 
转换int为JSON布尔值
转换int为JSON整数
转换json_int_t为JSON整数
f 转换double为JSON实数 
o 原样插入json_t*结构
和上面类似,但是目标json_t的引用计数会增加
 o?     o? 类似上面两个,但是当位置参数为NULL时插入null
[fmt] 使用内部的格式限定符构建一个JSON数组,fmt可以是任意符合要求的格式限定符序列
{fmt}  使用内部的格式限定符构建一个JSON对象,fmt可以是任意符合要求的格式限定符序列
解包JSON

下面的代码展示了如何把json_t结构解包为零散数据: 

 
 
C
 
1
2
3
4
5
6
;
;
;
// 可以仅仅解包一部分
;
;

相关文章: